基于stc89c52单片机的交通灯设计内容摘要:

组给主电源充电。 而当选用两个二极管串联时,假设二极管 处于截止状态,此时电压差为 , 二极截止,假设成立。 而当主电源断开时,能提供电压为 6V 减去 2 个二极管的压降为 ,此电压能保证单片机正常工作。 74HC573 的功能 9 图 SL74HC573 跟 LS/AL573 的管脚一样。 器件的输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。 当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。 当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。 输出能直接接到 CMOS, NMOS 和 TTL 接口上 操作电压范围: ~ 低输入电流: CMO S 器件的高噪声抵抗特性 三态总线驱动输出 置数全并行存取 缓冲控制输入 使能输入有改善抗扰度的滞后作用 原理说明: 10 M54HC563/74HC563/M54HC573/74HC573 的八个锁存器都是透明的 D 型锁存器,当使能( G)为高时, Q 输出 将随数据( D)输入而变。 当使能为低时,输出将锁存在已建立的数据电平上。 输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时, 新的数据也可以置入。 这种 电路可以驱动大 电容 或低阻抗负载,可以直接与系统总线接口 并驱动总线,而不需要外接口。 特别适用于缓冲寄存器, I/O 通道,双向总线驱动器和工作寄存器。 图 为 74HC573 引脚图。 HC573 引脚功能表: 引脚号 符号 名称及功能 1 OE 3 态输出使能输入(低电平) 2, 3, 4, 5, 6, 7, 8, 9 D0 to D7 数据输入 12,13,14,15,16,17,18,19 Q0 to Q7 3 态锁存输出 11 LE 锁存使能输入 10 GND 接地 (0V) 20 VCC 电源电压 发光二 极管 半导体发光器件包括半导体发光二极管(简称 LED)、数码管、符号管、米字管及点阵式显示屏(简称矩阵管)等。 事实上,数码管、符号管、米字管及矩阵管中的每个发光单元都是一个发光二极管。 图 是发光二极管图 11 图 发光二极管图 数码管 1. LED 数码管分类: 按其内部结构可分为共阴型和共阳型; 导通时正向压降一般为 ~ 2V,额定电流为 10mA,最大电流为 40mA。 2. 数码管工作原理 共阳极数码管的 8 个发光二极管的阳极(二极管正端)连接在一起。 通常,公共阳极接高电平 (一般接电源),其它管脚接段驱动电路输出端。 当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。 根据发光字段的不同组合可显示出各种数字或字符。 此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。 图 是数码管图 图 数码管图 3 软件设计 相较于 C 语言,汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效性的代码编写问题。 对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小于汇编语言很多。 综合以上 C 语言的优点,本设计在编程的时候选择了 C 语言。 12 本设计在编程环境上也选择了 Keil μ Vision。 这款软件支持众多不同公司的MCS51 架构芯片,它集编辑、编译、仿真为一体,同时还支持 PLM、汇编和 C 语言的程序设计,界面友好、简单易学,在调试程序。 软件仿真方面都有很强大的功能。 在初期的软件调试阶段, Keil μ Vision 会提供非常便利的环境。 在本次设计中,采用了 C 语言作为程序编程的语言。 程序如下 include define uchar unsigned char define uint unsigned int sbit dula=P2^6。 sbit wela=P2^7。 sbit beep=P2^3。 unsigned int pp。 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}。 uchar j,k,l=255。 uchar a1,a0。 uchar shijian,deng=2。 void delay(unsigned int i) { for(j=i。 j0。 j) for(k=125。 k0。 k)。 } void display(unsigned char sh_c,unsigned char g_c) { dula=0。 P0=table[sh_c]。 dula=1。 dula=0。 wela=0。 P0=0xfe。 wela=1。 wela=0。 13 delay(5)。 P0=table[g_c]。 dula=1。 dula=0。 P0=0xfd。 wela=1。 wela=0。 delay(5)。 } void main() { TMOD=0x01。 TR0=1。 TH0=(6553646080)/256。 // 由于晶振为 ,故所记 次数应为 46080,计时器每隔 50000 微秒发起一次中断。 TL0=(6553646080)%256。 //46080 的来历,为 50000* ET0=1。 EA=1。 while(1) { if(shijian==0) { switch(deng) { case 0: shijian=50。 //红灯 deng=1。 break。 case 1: shijian=15。 //黄灯 deng=2。 break。 case 2: shijian=50。 //绿灯 deng=3。 14 break。 case 3: shijian=15。 //黄灯 deng=0。 break。 } } if(pp==20) { pp=0。 shijian。 } a0=shijian%10。 a1=shijian/10。 display(a1,a0)。 switch(deng) { case 1: P1=0X00。 //红灯 break。 case 2: //黄灯 if(shijian%2==0) P1=0x00。 if(shijian%2==1) P1=0xff。 break。 case 3: //绿灯 if(shijian%2==0) P1=0x55。 if(shijian%2==1) P1=0xaa。 break。 case 0: if(shijian%2。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。