久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3386|回復: 0
打印 上一主題 下一主題
收起左側

C51仿真實現交通燈改進版+單片機代碼

[復制鏈接]
回帖獎勵 1 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
C51仿真實現交通燈+單片機代碼
http://www.zg4o1577.cn/bbs/dpj-141185-1.html
(出處: 單片機論壇)
在上一篇貼中,我們用了兩個鎖存器實現了交通燈的仿真,但是我們仔細觀察,可以發現交通燈的閃爍規律還可以更細一步,使用4個鎖存器就使代碼變得很簡潔了

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar m,n,k,f=1;
  6. uchar time1[]={20,120};//數碼管第一狀態5s,第二狀態6s
  7. uchar time2[]={100,10,60};//交通燈第一狀態5s,第二狀態3s,第三狀態3s
  8. uint index1=1;
  9. uint index2=0;
  10. uchar code table[]={
  11. 0x3f,0x06,0x5b,0x4f,
  12. 0x66,0x6d,0x7d,0x07,
  13. 0x7f,0x6f,0x77,0x7c,
  14. 0x39,0x5e,0x79,0x71,
  15. 0x00
  16. };
  17. uchar P2_0=0x01;//(P2.0~P2.3)選擇數碼管
  18. uchar P3_0=0x01;//(P30~P33)選擇交通燈
  19. uchar P1_0=0x04;//控制燈狀態
  20. int number=6;

  21. void showNumber()
  22. {
  23.         if(index1==0)
  24.         {
  25.                 P2=P2_0;       
  26.                 P0=~table[number];
  27.                 if(number==0)
  28.                 {
  29.                         P2=0x00;
  30.                         P2_0<<=1;
  31.                         if(P2_0==0x10)
  32.                                 P2_0=0x01;
  33.                         number=6;
  34.                         index1=1;
  35.                 }
  36.         }
  37. }
  38. void openLight()
  39. {
  40.         switch(index2)
  41.         {
  42.                 case 0:
  43.                 if(m==time2[index2])
  44.                 {
  45.                         index2=1;
  46.                         m=0;       
  47.                 }       
  48.                 break;
  49.                 case 1:
  50.                 if(m==time2[index2])
  51.                 {
  52.                         P1_0=P1_0^0x04;
  53.                         k++;
  54.                         m=0;
  55.                         if(k==8)
  56.                         {
  57.                            index2=2;
  58.                            P1_0=0x02;
  59.                            k=0;
  60.                         }
  61.                        
  62.                 }
  63.                 break;
  64.                 case 2:
  65.                 if(m==time2[index2])
  66.                 {
  67.                         P1_0=0x04;
  68.                         index2=0;
  69.                         P3_0=P3_0<<1;
  70.                         if(P3_0==0x10)
  71.                                 P3_0=0x01;
  72.                         m=0;
  73.                 }
  74.                 break;
  75.         }
  76.         P1=0x00;
  77.         P3=0xff;
  78.         P1=0x01;
  79.         P3=0x00;

  80.         P1=0x00;
  81.         P3=P3_0;
  82.         P1=P1_0;
  83.         P3=0x00;
  84. }
  85. void main()
  86. {
  87.         P1=0x00;
  88.         EA=1;//打開全局中斷允許
  89.         TMOD=0x11;//設置定時器工作方式
  90.         TH0=15535/256;//計時50ms
  91.         TL0=15535%256;
  92.         TH1=15535/256;
  93.         TL1=15535%256;
  94.         ET0=1;//打開計時器中斷允許
  95.         ET1=1;
  96.         TR0=1;//啟動定時器
  97.         TR1=1;
  98.         while(1)
  99.         {        //openLight();
  100.                 showNumber();
  101.         }
  102. }
  103. void ET_T0() interrupt 1
  104. {
  105.         TH0=15535/256;
  106.         TL0=15535%256;
  107.         m++;
  108.         openLight();
  109. }
  110. void ET_T1() interrupt 3
  111. {
  112.         TH1=15535/256;
  113.         TL1=15535%256;
  114.         n++;
  115.         switch(index1)
  116.         {
  117.                 case 0:
  118.                 if(n==time1[index1])
  119.                 {
  120.                         number=(number-1)%6;
  121.                         n=0;       
  122.                 }       
  123.                 break;
  124.                 case 1:
  125.                 if(n==time1[index1])
  126.                 {
  127.                         index1=0;
  128.                         n=0;
  129.                 }
  130.                 break;
  131.         }
  132. }
復制代碼

所有資料51hei提供下載:
交通燈改進版.zip (24.56 KB, 下載次數: 14)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产精品三区 | 日韩国产精品一区二区三区 | 蜜桃视频在线观看免费视频网站www | 粉嫩在线| av中文天堂 | 日韩精品久久 | av手机在线 | 久久久久久久久久久爱 | 欧美一区二区三区在线观看视频 | 91麻豆精品国产91久久久久久久久 | 国产片侵犯亲女视频播放 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 在线视频 欧美日韩 | 一级免费毛片 | 麻豆亚洲 | 亭亭五月激情 | 午夜精品在线 | 综合久| 91电影在线| 手机在线观看av | www.youjizz.com日韩 | 国产jizz女人多喷水99 | 亚洲一页 | 91精品国产手机 | 国产精品99久久久久久动医院 | 欧美日韩福利 | 国产在线永久免费 | 麻豆精品国产免费 | 九九热在线免费视频 | 久久国产精品免费一区二区三区 | 天天曰天天曰 | 中文字幕第一页在线 | 国产成人亚洲精品自产在线 | 国产在线精品一区二区三区 | 久久久久久久久久毛片 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 国产激情一区二区三区 | 国产精品久久久久久久久久久久 | 国产亚洲一区二区精品 | 免费观看毛片 | 一二三四在线视频观看社区 |