这是我前段时间写的交通灯程序,也是请教了论坛的大神帮忙解决的。图下面有源码,你自己看看吧。
- /**************************************************
- 实验名:交通灯设计
- 实验内容:利用中断,定时/计数器,数码管和led灯进行交通灯的设计
- *************************************************/
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit wei1=P2^4; //定义位选 0
- sbit wei2=P2^5; //1
- sbit wei3=P2^6; //2
- sbit wei4=P2^7; //3
- sbit green_we=P1^2; //定义交通灯 绿东西
- sbit green_ns=P1^3; //定义交通灯 绿南北
- sbit red_we=P1^0; //定义交通灯 红东西
- sbit red_ns=P1^1; //定义交通灯 红南北
- sbit yellow_we=P1^4; //定义交通灯 黄东西
- sbit yellow_ns=P1^5; //定义交通灯 黄南北
- uchar num,num1,shi_we,shi_ns,ge_we,ge_ns;
- uint xianshi_we,xianshi_ns;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f}; //定义数值0,1,2...9
- void delayms(uint xsm) //延时程序
- {
- uint i,j;
- for(i=xsm;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display(uchar shi_we,uchar ge_we,uchar shi_ns,uchar ge_ns) //定义数码管动态扫描函数
- {
- wei1=1;
- wei2=0;
- wei3=0;
- wei4=0;
- P0=table[shi_we];
- delayms(5);
- wei1=0;
- wei2=1;
- wei3=0;
- wei4=0;
- P0=table[ge_we];
- delayms(5);
- wei1=0;
- wei2=0;
- wei3=1;
- wei4=0;
- P0=table[shi_ns];
- delayms(5);
- wei1=0;
- wei2=0;
- wei3=0;
- wei4=1;
- P0=table[ge_ns];
- delayms(5);
- }
- void main()
- {
- num=0;
- num1=0;
- xianshi_we=19;
- xianshi_ns=19;
- shi_we=1;
- ge_we=9;
- shi_ns=1;
- ge_ns=9;
- TMOD=0x01; //设置定时器0和计数器1为工作方式1
- TH0=(65536-46080)/256; //设置初值
- TL0=(65536-46080)%256;
- EA=1; //开总中断
- ET0=1; //开定时器0中断
- TR0=1; //启动定时器0
- P1=0xff; //led灯全灭
- P1=0xf6; //定义东西亮红灯,南北亮绿灯;
- while(1)
- {
- display(shi_we,ge_we,shi_ns,ge_ns);
- if(num1==17)
- {
- P1=0xde; //定义东西亮红灯,南北亮黄灯;
- }
- if(num1==19)
- {
- P1=0xf9; //定义东西亮绿灯,南北亮红灯;
- xianshi_we=19;
- xianshi_ns=19;
- }
- if(num1==36)
- {
- P1=0xed; //定义东西亮黄灯,南北亮红灯;
- }
- if(num1==39)
- {
- num1=0;
- xianshi_we=19;
- xianshi_ns=19;
- P1=0xf6; //定义东西亮红灯,南北亮绿灯;
- }
- }
- }
- void T0_time()interrupt 1
- {
- TH0=(65536-46080)/256;
- TL0=(65536-46080)%256;
- num++;
- if(num%20==0)
- {
- num=0; num1++;
- xianshi_we--;
- xianshi_ns--;
- shi_we=xianshi_we/10;
- ge_we=xianshi_we%10;
- shi_ns=xianshi_ns/10;
- ge_ns=xianshi_ns%10;
- }
- }
复制代码
|