本人萌新一枚,刚刚开始学习单片机,前段时间突发奇想想用单片做一个交通灯
控制程序,在网上查找很多相关内容后终于自己写好程序了,也没有编译错误。但是,
实际运行时却达不到自己所预想的那样,所以想请教各位大神帮忙看看我写的程序哪出错了。
以下是我所写的程序。顺便把所使用的单片机构造图发给大家以便查看。
电路图.pdf
(58.17 KB, 下载次数: 7)
- /**************************************************
- 实验名:交通灯设计
- 实验内容:利用中断,定时/计数器,数码管和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}; //定义数值9,8,7...0
- 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=99;
- xianshi_ns=99;
- shi_we=9;
- ge_we=9;
- shi_ns=9;
- ge_ns=9;
- TMOD=0x51; //设置定时器0和计数器1为工作方式1
- TH0=(65536-46080)/256; //设置初值
- TL0=(65536-46080)%256;
- TH1=(65536-46080)/256;
- TL1=(65536-46080)%256;
- EA=1; //开总中断
- ET0=1; //开定时器0中断
- ET1=1; //开定时器1中断
- TR0=1; //启动定时器0
- TR1=1; //启动定时器1
- P1=0xff; //led灯全灭
- P1=0xf6; //定义东西亮红灯,南北亮绿灯;
- while(1)
- {
- display(shi_we,ge_we,shi_ns,ge_ns);
- if(num1==1140)
- {
- P1=0xde; //定义东西亮红灯,南北亮黄灯;
- }
- if(num1==1200)
- {
- P1=0xf9; //定义东西亮绿灯,南北亮红灯;
- xianshi_we=60;
- xianshi_ns=60;
- }
- if(num1==2340)
- {
- P1=0xed; //定义东西亮黄灯,南北亮红灯;
- }
- if(num1==2400)
- {
- num1=0;
- xianshi_we=60;
- xianshi_ns=60;
- P1=0xf6; //定义东西亮红灯,南北亮绿灯;
- }
- }
- }
- void T0_time()interrupt 1
- {
- TH0=(65536-46080)/256;
- TL0=(65536-46080)%256;
- num++;
- if(num%20==0)
- {
- num=0;
- xianshi_we--;
- xianshi_ns--;
- shi_we=xianshi_we/10;
- ge_we=xianshi_we%10;
- shi_ns=xianshi_ns/10;
- ge_ns=xianshi_ns%10;
- }
- }
- void T1_count() interrupt 3
- {
- TH1=(65536-46080)/256;
- TL1=(65536-46080)%256;
- num1++;
- }
复制代码
|