本人萌新一枚,剛剛開始學習單片機,前段時間突發奇想想用單片做一個交通燈
控制程序,在網上查找很多相關內容后終于自己寫好程序了,也沒有編譯錯誤。但是,
實際運行時卻達不到自己所預想的那樣,所以想請教各位大神幫忙看看我寫的程序哪出錯了。
以下是我所寫的程序。順便把所使用的單片機構造圖發給大家以便查看。
電路圖.pdf
(58.17 KB, 下載次數: 7)
2016-11-2 11:42 上傳
點擊文件名下載附件
- /**************************************************
- 實驗名:交通燈設計
- 實驗內容:利用中斷,定時/計數器,數碼管和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++;
- }
復制代碼
|