找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8567|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

簡易交通燈[c語言+仿真圖]完整注釋

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
簡易交通燈【c語言+仿真圖】完整注釋


單片機(jī)源程序:
  1. #include<reg51.h>
  2. #include<absacc.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define PA XBYTE[0xf8ff]                                //定義A口
  6. #define PB XBYTE[0xf9ff]                                //定義B口
  7. #define PC XBYTE[0xfaff]                            //定義C口
  8. #define CTRL XBYTE[0xfbff]                                //ctrol簡寫為CTRL 定義控制口

  9. uint i = 0, cnt = 120, flag=0;
  10. uchar table[]={                                                                        //共陰極
  11. 0x3f,0x06,0x5b,0x4f,
  12. 0x66,0x6d,0x7d,0x07,
  13. 0x7f,0x6f,0x77,0x7c,
  14. 0x39,0x5e,0x79,0x71
  15. };

  16. void display(int x, int y, int m, int n, int a, int  b, int c, int d);
  17. void delay(int);
  18. void main()
  19. {
  20.     CTRL = 0x80;                           //1000 0000B        方式選擇控制字: A口方式0 A口位輸出 C口高4位輸出 B口方式0 B口輸出 C口低4位輸出
  21.         IP = 0x05;
  22.         TMOD = 0x01;                      //方式寄存器TMOD    0000 0001B 定時器0,方式1
  23.     TH0 = (65536-50000)/256;                          
  24.     TL0 = (65536-50000)%256; //定時50ms
  25.     EA = 1;                                         //開總中斷
  26.     ET0 = 1;                                 //允許定時器0中斷
  27.     TR0 = 1;                                 //開啟定時器0
  28.     while(1)
  29.         {
  30.                 if(cnt > 65)                   //120-cnt 小于55
  31.                 {                                                                                   
  32.                           XBYTE[PA] = 0x33;  //0011 0011B PA2綠燈亮 PA3紅燈亮
  33.                         display(0xfe ,0xfd, 0xfb, 0xf7, (cnt-65)/10, (cnt-65)%10, (cnt-60)/10, (cnt-60)%10);
  34.                 }  //1111 1110B,(P1.0) 1111 1101B,(P1.1) 1111 1011B,(P1.2) 1111 0111B,(p1.3)假設(shè)cnt=70即計(jì)數(shù)50次此時南北綠燈顯示05 東西紅燈顯示10;
  35.                   else if(cnt > 60 && cnt <= 65)        //120-cnt介于 55與60之間
  36.                   {
  37.                     if(flag == 0)                           
  38.                         {
  39.                           XBYTE[PA] = 0x35;//0011 0101B  PA1黃燈亮  PA3紅燈亮  
  40.                           display(0xff ,0xff, 0xfb, 0xf7, (cnt-60)/10,(cnt-60)%10, (cnt-60)/10,(cnt-60)%10);
  41.                         } //1111 1111B,1111 1111B 1111 1011B 1111 0111B 假設(shè)cnt=62 即計(jì)數(shù)120-62=58次,此時南北黃燈顯示數(shù)字02 東西顯示紅燈02;
  42.                     if(flag == 1)                           
  43.                         {
  44.                           XBYTE[PA] = 0x35;//0011 0101B         PA1黃燈亮 PA3紅燈亮
  45.                           display(0xfe ,0xfd, 0xfb, 0xf7, (cnt-60)/10,(cnt-60)%10, (cnt-60)/10,(cnt-60)%10);
  46.                         }//1111 1110B,1111 1101B,1111 1011B,1111 0111B 假設(shè)cnt=62 即計(jì)數(shù)120-62=58次,此時南北紅燈顯示數(shù)字02,東西顯示綠燈02;
  47.                   }
  48.                 else if(cnt <= 60 && cnt > 5) //120-cnt介于 60與115之間
  49.                   {
  50.                         XBYTE[PA] = 0x1e; //0001 1110B   PA0紅燈亮 PA5綠燈亮
  51.             display(0xfe ,0xfd, 0xfb, 0xf7, (cnt)/10,(cnt)%10, (cnt-5)/10,(cnt-5)%10);
  52.                   }//1111 1110B,1111 1101B,1111 1011B,1111 0111B    假設(shè)cnt=40 即計(jì)數(shù)120-40=80次,此時南北紅燈顯示數(shù)字40,東西綠燈顯示35;
  53.                 else if(cnt > 0 && cnt <= 5) //120-cnt 介于 115與120之間
  54.             {
  55.                         if(flag == 0)
  56.                         {
  57.                           XBYTE[PA] = 0x2e;//0010 1110B        PA0紅燈亮 PA4黃燈亮
  58.                           display(0xfe ,0xfd, 0xff, 0xff, (cnt)/10,(cnt)%10, (cnt)/10,(cnt)%10);
  59.                         }//1111 1110B,1111 1101B,1111 1111B,1111 1111B 假設(shè)cnt=3即計(jì)數(shù)120-3=117次,此時南北紅燈顯示數(shù)字03,東西黃燈顯示數(shù)字03
  60.                     if(flag == 1)
  61.                         {
  62.                           XBYTE[PA] = 0x2e;//0010 1110B         PA0紅燈亮 PA4黃燈亮
  63.                           display(0xfe ,0xfd, 0xfb, 0xf7, (cnt)/10,(cnt)%10, (cnt)/10,(cnt)%10);
  64.                         }//1111 1110B,1111 1101B,1111 1101B,1111 0111B 假設(shè)cnt=3即計(jì)數(shù)120-3=117次,此時南北紅燈顯示數(shù)字03,東西黃燈顯示數(shù)字03
  65.                 }
  66.         }
  67. }

  68. void display(int x, int y, int m, int n, int a, int  b, int c, int d)                           //數(shù)碼管
  69. {
  70.     P1 = x;                                  //P1.0
  71.         PB = table[a];                  //南北方向高位數(shù)碼管顯示數(shù)字
  72.         delay(1);                          //調(diào)用延時函數(shù)
  73.     P1 = y;                                  //P1.1
  74.         PB = table[b];                  //南北方向低位數(shù)碼管顯示數(shù)字
  75.         delay(1);                          //調(diào)用延時函數(shù)
  76.                                                 
  77.         P1 = m;                                  //P1.2
  78.         PC = table[c];                  //東西方向高位數(shù)碼管顯示數(shù)字
  79.         delay(1);                          //調(diào)用延時函數(shù)
  80.     P1 = n;                                  //P1.3
  81.         PC = table[d];                  //東西方向低位數(shù)碼管顯示數(shù)字
  82.         delay(1);                      //調(diào)用延時函數(shù)
  83. }

  84. void delay(int z)                         //延時子程序
  85. {
  86. uint x,y;
  87. for(x=z;x>0;x--)
  88. for(y=110;y>0;y--);
  89. }

  90. void mytimer0() interrupt 1                 //定時器中斷0
  91. {
  92.   TH0 = (65536-50000)/256;
  93.   TL0 = (65536-50000)%256;                 //定時50ms

  94.   i++;
  95.   if(i >= 10)                                         //T=50ms*10=500ms
  96.   {
  97.     flag ++;                                        //flag每0.5秒加1
  98.     i = 0;
  99.   }

  100.   if(flag > 1)                                                
  101.   {
  102.           flag=0;
  103.         cnt --;                                                 //cnt每秒減1
  104.   }


  105. …………限于本文篇幅 余下代碼請從51hei下載附件…………
復(fù)制代碼

下載:
NO.3.rar (60.16 KB, 下載次數(shù): 80)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:259641 發(fā)表于 2017-12-10 10:29 | 只看該作者
沒有黑幣啊
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表