用s7-200和4个LED数码管设计显示小时及分钟的电路及控制程序
给个邮箱,发给你
你的问题如此的不清晰。。。让我不知道怎么回答。
最少你要说用几个 数码管吧, 还有程序是要 汇编的,还是用 C 的;还有这个程序的功能你需要什么,是只有驱动程序还是要带其他的。
这还不算你要用的单片机具体的型号,51系列的单片机还是有差异的。。。
#include <intrins.h>
sbit SCK=P3^6; //时钟
sbit SDA=P3^4; //数据
sbit RST = P3^5;// DS1302复位
sbit LS138A=P2^2;
sbit LS138B=P2^3;
sbit LS138C=P2^4;
bit ReadRTC_Flag;//定义读DS1302标志
unsigned char l_tmpdate[7];//={0,0,13,15,5,3,8};//秒分时日月周年08-05-15 12:00:00
unsigned char l_tmpdisplay[8];
code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 最低位读写位
code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
//共阴数码管 0-9 '-' '熄灭‘表
/******************************************************************/
/* 函数声明 */
/******************************************************************/
void Write_Ds1302_byte(unsigned char temp);
void Write_Ds1302( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302 ( unsigned char address );
void Read_RTC(void);//read RTC
void Set_RTC(void); //set RTC
void InitTIMER0(void);//inital timer0
/******************************************************************/
/* 主函数 */
/******************************************************************/
void main(void)
{
InitTIMER0(); //初始化定时器0
Set_RTC(); //写入时钟值,如果使用备用电池时候,不需要没每次上电写入,此程序应该屏蔽
while(1)
{
if(ReadRTC_Flag) // ReadRTC_Flag==1执行下面语句
{
ReadRTC_Flag=0;
Read_RTC();
l_tmpdisplay[0]=l_tmpdate[2]/16; //数据的转换,因我们采用数码管0~9的显示,将数据分开
l_tmpdisplay[1]=l_tmpdate[2]&0x0f;
l_tmpdisplay[2]=10; //加入"-"
l_tmpdisplay[3]=l_tmpdate[1]/16;
l_tmpdisplay[4]=l_tmpdate[1]&0x0f;
l_tmpdisplay[5]=10;
l_tmpdisplay[6]=l_tmpdate[0]/16;
l_tmpdisplay[7]=l_tmpdate[0]&0x0f;
}
}
}
/******************************************************************/
/* 定时器0初始化 */
/******************************************************************/
void InitTIMER0(void)
{
TMOD|=0x01;//定时器设置 16位
TH0=0xef;//初始化值
TL0=0xf0;
ET0=1;
TR0=1;
EA=1;
}
/******************************************************************/
/* 写一个字节 */
/******************************************************************/
void Write_Ds1302_Byte(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++) //循环8次 写入数据
{
SCK=0;
SDA=temp&0x01; //每次传输低字节
temp>>=1; //右移一位
SCK=1;
}
}
/******************************************************************/
/* 写入DS1302 */
/******************************************************************/
void Write_Ds1302( unsigned char address,unsigned char dat )
{
RST=0;
_nop_();
SCK=0;
_nop_();
RST=1;
_nop_(); //启动
Write_Ds1302_Byte(address); //发送地址
Write_Ds1302_Byte(dat); //发送数据
RST=0; //恢复
}
/******************************************************************/
/* 读出DS1302数据 */
/******************************************************************/
unsigned char Read_Ds1302 ( unsigned char address )
{
unsigned char i,temp=0x00;
RST=0;
_nop_();
_nop_();
SCK=0;
_nop_();
_nop_();
RST=1;
_nop_();
_nop_();
Write_Ds1302_Byte(address);
for (i=0;i<8;i++) //循环8次 读取数据
{
if(SDA)
temp|=0x80; //每次传输低字节
SCK=0;
temp>>=1; //右移一位
_nop_();
_nop_();
_nop_();
SCK=1;
}
RST=0;
_nop_(); //以下为DS1302复位的稳定时间
_nop_();
RST=0;
SCK=0;
_nop_();
_nop_();
_nop_();
_nop_();
SCK=1;
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
return (temp); //返回
}
/******************************************************************/
/* 读时钟数据 */
/******************************************************************/
void Read_RTC(void) //读取 日历
{
unsigned char i,*p;
p=read_rtc_address; //地址传递
for(i=0;i<7;i++) //分7次读取 秒分时日月周年
{
l_tmpdate[i]=Read_Ds1302(*p);//将l_tmpdate[i]的数写入地址Read_Ds1302
p++;
}
}
/******************************************************************/
/* 设定时钟数据 */
/******************************************************************/
void Set_RTC(void) //设定 日历
{
unsigned char i,*p,tmp;
for(i=0;i<7;i++){ //BCD处理
tmp=l_tmpdate[i]/10;
l_tmpdate[i]=l_tmpdate[i]%10;
l_tmpdate[i]=l_tmpdate[i]+tmp*16;
}
Write_Ds1302(0x8E,0X00);
p=write_rtc_address; //传地址
for(i=0;i<7;i++) //7次写入 秒分时日月周年
{
Write_Ds1302(*p,l_tmpdate[i]);
p++;
}
Write_Ds1302(0x8E,0x80);
}
/******************************************************************/
/* 定时器中断函数 */
/******************************************************************/
void tim(void) interrupt 1 using 1
//中断,用于数码管扫描
{
static unsigned char i,num;
TH0=0xf5;
TL0=0xe0;
P0=table[l_tmpdisplay[i]]; //查表法得到要显示数字的数码段
switch(i)
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
case 4:LS138A=0; LS138B=0; LS138C=1; break;
case 5:LS138A=1; LS138B=0; LS138C=1; break;
case 6:LS138A=0; LS138B=1; LS138C=1; break;
case 7:LS138A=1; LS138B=1; LS138C=1; break;
}
i++;
if(i==8)
{
i=0;
num++;
if(10==num) //隔段时间读取1302的数据。时间间隔可以调整
{
ReadRTC_Flag=1; //使用标志位判断
num=0;
}
}
}
这个是DS1302显示时间C程序,你好好看看吧。
`
西门子PLC有哪些系列和特点
西门子PLC按照小型、中型、大型分为三种,依次为:s7-200, s7-300, S7-400系列, 西门子PLC的选型与一般PLC选型原则无异。西门子PLC的特点:1、可靠 PLC不需要大量的活动元件和连线电子元件。它的连线大大减少。与此同时,系统的维修简单,维修时间短。Plc采用了一系列可靠性设计的方法进行设计。例如...
S7-200 Smart可以以太网通讯吗?如能最大可以几个通讯
可以,目前SMART200自带一个以太网口,没有扩展以太网口,最多支持4个触摸屏通讯,新版2.0版本可以同时读取8个CPU和写入8个CPU,一共可以和16个CPU同时通讯。
S7-200CN 后面的“CN”是什么意思呀和s7-200有什么区别吗
一、I\/O点不同 1、S7-200CN:集成6输入\/4输出共10个数字量I\/O点。无I\/O扩展能力。2、s7-200:本机集成8输入\/6输出共14个数字量I\/O点。可连接2个扩展模块。二、存储能力不同 1、S7-200CN:6K字节程序和数据存储空间。4个独立的30kHz高速计数器,2路独立的20kHz高速脉冲输出。2、s7-200...
西门子plc和s7-200的区别是什么?
3. 适用范围:ET200SP适用于大规模的复杂工业控制系统,需要与其他控制器进行联网,实现多节点的控制和数据共享。而S7-200适用于小型控制系统,需要实现独立的控制和数据采集。4. 编程方式:ET200SP和S7-200的编程方式也有不同,ET200SP是基于S7-1500的“TIA编程平台”进行编程,而S7-200是基于Step 7...
plc数据类型S7-200
前面说的基本都是对的。位、字节、字、双字等是计算机中的存储单元,在计算机世界中它只认识1和0两个数字,所以他们只占一个位,当有8个位时就用字节(byte)表示,16个位用字表示,32位用双字表示,双字=2个字=4个字节=32个位。而整数、双整数、实数、字符串等等都是指数据类型。int 整型数据 ...
西门子模拟量问题
A=(D-D0)×(Am-A0)/(Dm-D0)+A0。根据该方程式,可以方便地根据D值计算出A值。将该方程式逆变换,得出函数关系D=f(A)可以表示为数学方程:D=(A-A0)×(Dm-D0)/(Am-A0)+D0。具体举一个实例,以S7-200和4—20mA为例,经A\/D转换后,我们得到的数值是6400—32000,...
西门子S7-200CPU224与226的区别
可以利用PC\/PPI 电缆和自由口通讯功能把 S7-200 CPU 连接到许多和RS-232标准兼容的设备。有两种不同型号的 PC\/PPI 电缆:带有RS-232口的隔离型 PC\/PPI 电缆,用5个DIP开关设置波特率和其它配置项 (见下图)。带有RS-232口的非隔离型 PC\/PPI 电缆,用4个DIP开关设置波特率。 有关非隔离型PC\/...
西门子PLC模拟量输入范围:0~+5V,那么AIW0,AIW2,AIW4是什么啊
1、AIW0表示S7-200上的第一个模拟量通道的地址。2、AIW2表示S7-200上的第二个模拟量通道的地址。3、AIW4表示S7-200上的第四个模拟量通道的地址。4、PLC将模拟量值转换成1个字长(16位)的数字量,能用区域标识符(AI)、数据长度(W)和字节的起始地址来存取。5、EM235是西门子PLC模拟量扩展模块...
西门子plc s7-200 中I、Q、M、SM、T、C、V、S、L分别指什么?
输入继电器 I 输出继电器Q 通用辅助继电器M 特殊继电器SM 定时器T 计数器C 变量存储器V 顺序控制继电器S 局部变量存储器L 西门子S7-200PLC在实时模式下具有速度快,具有通讯功能和较高的生产力的特点。一致的模块化设计促进了低性能定制产品的创造和可扩展性的解决方案。来自西门子的S7 - 200微型PLC可以...
"西门子PLC S7-200模拟量输入"怎么编程?
根据该方程式,可以方便地根据D值计算出A值。将该方程式逆变换,得出 函数关系D=f(A)可以表示为数学方程:D=(A-A0)×(Dm-D0)/(Am-A0)+D0。具体举一个实例,以S7-200和4—20mA为例,经A\/D转换后,我们得到的 数值是*00—32000,即A0=4,Am=20,D0=*00,Dm=32000,代入...
边孙新红: 数码管上只有4个插孔的话,说明模块中已经有译码器了,你这样 1--Q0.0, 2--q0.1, 4--q0.2, 8--q0.3 然后用传送,mov_b,给QB0传数值,传几就显示几了. 例如,传5,这样就是q0.0和q0.2输出1,数码管就是1+4=5传3,这样就是q0.0和q0.1输出1,数码管就是1+2=3
天水市18512718416: 用西门子plc s7 - 200在数码管上显示数字的功能,应该用什么指令? - ?
边孙新红: 7段数码管用SEG指令 你的数码块上的4个插孔是8、4、2、1这是BCD码,应该用I_BCD
天水市18512718416: 大神帮帮忙啊 求S7 - 200西门子PLC对物品计数通过LED数码管显示的梯形图 - ?
边孙新红: 有没有硬件接线?因为你用了两位数码管,直接连接的话,CPU的输出点是不够用的.如果只有一位数码管,则可以把7段接在Q0.0~Q0.6上.
天水市18512718416: 我想用plc s7 - 200直接驱动LED 或LCD,但是现在问题是显示模块会很多(显示相同的东西,怎么接,有什么 - ?
边孙新红: 现在的led和lcd很多支持二次开发的,你可以根据二次开发的通信要求,将plc和屏做通信
天水市18512718416: PLC S7 - 200 如何输出计数器的数据....用7段数码管显示..例如电子钟.. - ?
边孙新红: 可以利用计数器的辅助触头作为数字电路中计数器的脉冲信号、然后将数字电路中的计数器与译码器配合起来作为7段数码管的输入信号、在配合驱动电路就可以了……
天水市18512718416: 做基于S7 - 200的智能交通灯的课程设计,排成箭头的点阵LED灯和双色数码管如何驱动啊?复制的走开! - ?
边孙新红: PLC-24V,输出驱动继电器,然后通过继电器控制LED灯,多少都可以控制!根据电流大小,通断次数,选择合适的继电器即可!
天水市18512718416: 请问s7 - 200 连接 LED温度电子屏,如何编程及通讯或设置? - ?
边孙新红: 可以通过profibus与WINCC通讯,如果用PPI通讯的话,需要在上位机做OPC.PPI线缆短的话可以买根长的,或者做一个RS232-RS485转换的线缆.个人建议使用profibus
天水市18512718416: S7 - 200 段位码怎样输出或显示 - ?
边孙新红: 是控制LED数码管显示的吗如果那样的话,就可以像单片机编程的那样了把0-9的LED段码按顺序放在一个数据区里,然后拿0-9当索引就可以取出相应数字的段码了,位码按顺序显示了
天水市18512718416: PLC驱动两个LED数码管 - ?
边孙新红: 买个测电压的五位数码管就可以了 用模拟输出0-10V,对应0-100度
天水市18512718416: s7 - 200驱动七段码LED??
边孙新红: 一个SEG的输出需要8个输出口,如果要显示多位的数,可以用依次输出的办法把几个七段显码的引脚共同接在一组8个输出口,在编程选用使他们依次导通由于导通时间的毫秒级,视觉的感觉就连贯(当然选通输出口也使必须的)关键是编程.