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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機交通燈 紅綠燈設計 程序+電路圖+PROTUES仿真下載

  [復制鏈接]
跳轉到指定樓層
樓主
ID:82781 發表于 2015-6-12 00:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


程序預覽:
1.main.c 文件:
  1. #define _MAIN_C
  2. #include "use.h"
  3. #include "main.h"
  4. #include "time.h"
  5. #include "key.h"
  6. bit flag1s;
  7. uchar count1s,NS_time,WE_time;
  8. uchar GreenTime=30,RedTime=35;
  9. uchar index=0;
  10. enum eStaSysterm StaSysterm=NormalRun;

  11. void main()
  12. {
  13.         EA=1;                                                                  //開總中斷
  14.         InintTimer0();                                                  //初始化定時器0
  15.         while(1)
  16.         {       
  17.                 LEDScan();                                                  //數碼管即LED掃描
  18.                 KeyDriver();                                          //鍵盤驅動掃描
  19.                 if(flag1s)
  20.                 {
  21.                         flag1s=0;
  22.                         NS_time--;                                          //紅綠燈倒計時時間減
  23.                         WE_time--;
  24.                 }       
  25.         }
  26. }
  27. void InintTimer0()
  28. {
  29.         TMOD=0X01;
  30.         TH0=0X4C;
  31.         TL0=0X00;
  32.         ET0=1;
  33.         TR0=1;
  34. }
  35. void Timer0() interrupt 1
  36. {
  37.         TH0=0XBB;
  38.         TL0=0X00;
  39.         KeyScan();
  40.         if(++count1s<50)        return;
  41.         count1s=0;
  42.         if(StaSysterm==NormalRun) flag1s=1;         //非正常運行時,不紅綠燈數值不減一       
  43. }
  44. void LEDScan()
  45. {
  46.          if(StaSysterm==NormalRun)                         //正常運行
  47.          {
  48.                 if(NS_time==0 || WE_time==0)
  49.                 {
  50.                         switch(index)                                 //改變紅綠燈的狀態,狀態機
  51.                         {
  52.                                 case 0:
  53.                                 {
  54.                                         index=1;
  55.                                         NS_time=GreenTime;
  56.                                         WE_time=RedTime;
  57.                                         P2=0X09;       
  58.                                 }break;
  59.                                 case 1:
  60.                                 {
  61.                                         index=2;
  62.                                         NS_time=RedTime-GreenTime;
  63.                                         P2=0X0A;       
  64.                                 }break;
  65.                                 case 2:
  66.                                 {
  67.                                         index=3;
  68.                                         NS_time=RedTime;
  69.                                         WE_time=GreenTime;
  70.                                         P2=0X24;       
  71.                                 }break;
  72.                                 case 3:
  73.                                 {
  74.                                         index=0;
  75.                                         WE_time=RedTime-GreenTime;
  76.                                         P2=0X14;       
  77.                                 }break;
  78.                                 default:break;
  79.                         }
  80.                 }
  81.                 Seg_Display(NS_time/10,0);
  82.                 Seg_Display(NS_time%10,1);
  83.                 Seg_Display(WE_time/10,2);
  84.                 Seg_Display(WE_time%10,3);
  85.         }
  86.         else if(StaSysterm==UrgentRun)
  87.         {                                                                   //緊急情況運行
  88.                 P2=0x12;
  89.                 Delayms(200);
  90.                 P2=0x00;
  91.                 Delayms(200);
  92.         }
  93.         else                                                           //設置調整紅綠燈時間
  94.         {
  95.                 index=0;
  96.                 NS_time=0;
  97.                 WE_time=0;         //重新初始化紅綠燈并運行
  98.                 UrgentScan();
  99.         }
  100. }
復制代碼


2. key.c文件:
  1. #include "use.h"
  2. #include "time.h"
  3. sbit KEY1=P3^4;
  4. sbit KEY2=P3^5;
  5. sbit KEY3=P3^6;
  6. sbit KEY4=P3^7;
  7. uchar keystr[]={1,1,1,1},backup[]={1,1,1,1};
  8. void KeyScan()                                                                //鍵盤掃描
  9. {
  10.         static uchar keybuf[4]={0XFF,0XFF,0XFF,0XFF};
  11.         uchar i;
  12.         keybuf[0]=(keybuf[0]<<1)|KEY1;
  13.         keybuf[1]=(keybuf[1]<<1)|KEY2;
  14.         keybuf[2]=(keybuf[2]<<1)|KEY3;
  15.         keybuf[3]=(keybuf[3]<<1)|KEY4;
  16.         for(i=0;i<4;i++)
  17.         {
  18.                 if(keybuf[i]==0X00)                        keystr[i]=0;
  19.                 else if(keybuf[i]==0XFF)         keystr[i]=1;
  20.         }
  21. }
  22. void KeyAction(uchar key)                                                 //鍵盤執行
  23. {
  24.         switch(key)
  25.         {
  26.                 case 0:        SetModel();                break;       
  27.                 case 1:        ADDTime();                break;
  28.                 case 2:        SUBTime();                break;
  29.                 case 3: UrgentModel();        break;
  30.                           default:break;
  31.         }
  32. }
  33. void KeyDriver()                                                                 //鍵盤驅動
  34. {
  35.         uchar i;
  36.         for(i=0;i<4;i++)
  37.         {
  38.                 if(keystr[i]!=backup[i])
  39.                 {
  40.                         if(keystr[i]==0)
  41.                                 KeyAction(i);//這里適當修改程序可以實現組合按鍵的效果
  42.                 }
  43.                 backup[i]=keystr[i];
  44.         }
  45. }
復制代碼



3. time.c文件:
  1. #include "use.h"
  2. #include "main.h"

  3. uchar code seg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  4. uchar code seg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  5. uchar BackupGreen,BackupRed,CopyLight;

  6. void Seg_Display(uchar number,uchar wei)        //數碼管動態顯示程序
  7. {
  8.         P0=0XFF;
  9.         we=1;
  10.         we=0;
  11.         P0=seg_du[number];
  12.         du=1;
  13.         du=0;
  14.         P0=seg_we[wei];
  15.         we=1;
  16.         we=0;
  17. }
  18. void UrgentScan()                                                    //緊急情況運行掃描
  19. {
  20.         Seg_Display(BackupGreen/10,0);
  21.         Seg_Display(BackupGreen%10,1);
  22.         Seg_Display(BackupRed/10,2);
  23.         Seg_Display(BackupRed%10,3);
  24. }
  25. void SetModel()                                                                //紅綠燈設置模式
  26. {
  27.         if(StaSysterm==NormalRun)
  28.         {
  29.                 StaSysterm=ResetGreen;  //狀態機
  30.             BackupGreen=GreenTime;
  31.             BackupRed=RedTime;       
  32.                 CopyLight=P2;                        //對數據進行備份
  33.                 P2=0X09;
  34.         }
  35.         else if(StaSysterm==ResetGreen)
  36.         {
  37.             StaSysterm=ResetRed;
  38.         }
  39.         else if(StaSysterm==ResetRed)
  40.         {
  41.                 StaSysterm=NormalRun;
  42.                 P2=CopyLight;                        //恢復數據
  43.         }
  44. }
  45. void ADDTime()                                                            //紅綠燈時間加
  46. {
  47.         if(StaSysterm==ResetGreen)
  48.         {
  49.                 BackupGreen++;
  50.                 if(BackupGreen>=BackupRed)           BackupGreen=BackupRed;
  51.         }
  52.         else if(StaSysterm==ResetRed)
  53.         {
  54.             BackupRed++;
  55.         }
  56. }
  57. void SUBTime()                                                                   //紅綠燈時間減
  58. {
  59.         if(StaSysterm==ResetGreen)
  60.         {
  61.                 BackupGreen--;
  62.        
  63.         }
  64.         else if(StaSysterm==ResetRed)
  65.         {
  66.             BackupRed--;
  67.                 if(BackupGreen>=BackupRed)           BackupRed=BackupGreen;
  68.         }
  69. }

  70. /****************
  71. void Confirm()                                                                   //備用函數
  72. {
  73.         if(StaSysterm!=NormalRun && StaSysterm!=UrgentRun)
  74.         {
  75.                 GreenTime=BackupGreen;
  76.                 RedTime=BackupRed;
  77.                 StaSysterm=NormalRun;
  78.         }

  79. }
  80. **************/
  81. void UrgentModel()                                                           //緊急模式
  82. {
  83.         if(StaSysterm==NormalRun)
  84.         {       
  85.                 StaSysterm=UrgentRun;
  86.                 CopyLight=P2;                         //對數據進行備份
  87.                 P0=0XFF;
  88.                 we=1;
  89.                 we=0;
  90.         }
  91.         else if(StaSysterm==UrgentRun)
  92.         {       
  93.                 StaSysterm=NormalRun;
  94.                 P2=CopyLight;                           //恢復數據
  95.         }
  96.         else if(StaSysterm==ResetGreen || StaSysterm==ResetRed)
  97.         {
  98.                 StaSysterm=NormalRun;
  99.                 GreenTime=BackupGreen;
  100.             RedTime=BackupRed;                   //重新設置紅綠燈時間
  101.         }
  102. }
復制代碼

完整程序代碼,及其電路圖和仿真文件下載: 加強版紅綠燈.rar (70.65 KB, 下載次數: 1710)

評分

參與人數 22黑幣 +102 收起 理由
whbt51h + 12 很給力!
卡卡卡西 + 5 共享資料的黑幣獎勵!
mimonarch + 5 回帖助人的獎勵!
haha_haha + 4
vktpas + 3 贊一個!
陳見夏 + 5 贊一個!
Vvinsmoke + 3 共享資料的黑幣獎勵!
xsy137158143 + 5 贊一個!
用戶名已被占用 + 5 很給力!
yinkun230 + 5 贊一個!
crazyol + 5 很給力!
46546541561 + 5 很給力!
許久先生 + 5 很給力!
qqqq1 + 1
眼睛睜大啦 + 5 共享資料的黑幣獎勵!
nliang + 3 贊一個!
shanel + 5 絕世好帖!
xjjiangxin + 3
我不是我 + 5 共享資料的黑幣獎勵!
Tristina + 5 很給力!
msifortinet + 5 學習中,如果能有多點注釋就更好了
huangxiao + 3 贊一個!

查看全部評分

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

使用道具 舉報

沙發
ID:82988 發表于 2015-7-11 11:00 | 只看該作者
不錯,支持下
回復

使用道具 舉報

板凳
ID:90378 發表于 2015-10-10 00:56 | 只看該作者
不錯,如果加入轉彎信號燈就更好了
回復

使用道具 舉報

地板
ID:95336 發表于 2015-11-11 13:44 | 只看該作者
求匯編程序!!!
回復

使用道具 舉報

5#
ID:100265 發表于 2015-12-24 20:36 來自觸屏版 | 只看該作者
匯編程序的有沒有啊
回復

使用道具 舉報

6#
ID:99525 發表于 2015-12-28 07:08 | 只看該作者
不錯,這個也算比較完整的了
回復

使用道具 舉報

7#
ID:106369 發表于 2016-2-25 18:43 | 只看該作者
雪玉寐影 發表于 2015-12-28 07:08
不錯,這個也算比較完整的了

請問這個解壓包下載之后,里面的文件是用什么軟件打開啊。是proteus嗎
回復

使用道具 舉報

8#
ID:85227 發表于 2016-3-9 17:29 | 只看該作者
很不錯,支持一下
回復

使用道具 舉報

9#
ID:85227 發表于 2016-3-9 17:29 | 只看該作者
定喜愛
回復

使用道具 舉報

10#
ID:111153 發表于 2016-3-28 16:38 | 只看該作者
下下來學習一下
回復

使用道具 舉報

11#
ID:111474 發表于 2016-3-30 18:57 | 只看該作者
支持支持,正在做課程設計~
回復

使用道具 舉報

12#
ID:112635 發表于 2016-4-7 01:16 | 只看該作者
支持支持,正在找,謝謝
回復

使用道具 舉報

13#
ID:123509 發表于 2016-5-27 14:43 | 只看該作者

匯編程序的有沒有
回復

使用道具 舉報

14#
ID:123509 發表于 2016-5-27 14:48 | 只看該作者
匯編程序的有沒有
回復

使用道具 舉報

15#
ID:124737 發表于 2016-6-2 17:52 | 只看該作者
keyi de
回復

使用道具 舉報

16#
ID:126188 發表于 2016-6-11 09:07 | 只看該作者
很好,值得下載
回復

使用道具 舉報

17#
ID:127801 發表于 2016-6-23 14:25 | 只看該作者
求匯編程序
回復

使用道具 舉報

18#
ID:129302 發表于 2016-7-5 15:03 | 只看該作者
多個c文件怎么弄到一起啊
回復

使用道具 舉報

19#
ID:129302 發表于 2016-7-5 15:10 | 只看該作者
怎么有錯誤啊  是什么情況啊
回復

使用道具 舉報

20#
ID:129595 發表于 2016-7-7 19:32 | 只看該作者
謝謝樓主
回復

使用道具 舉報

21#
ID:129595 發表于 2016-7-7 19:32 | 只看該作者
哈哈哈哈哈哈哈 謝謝樓主
回復

使用道具 舉報

22#
ID:136440 發表于 2016-8-10 16:03 | 只看該作者
嗯 不多 多多學習
回復

使用道具 舉報

23#
ID:138549 發表于 2016-9-5 23:57 | 只看該作者
不錯 樓主辛苦了
回復

使用道具 舉報

24#
ID:147666 發表于 2016-11-13 21:06 | 只看該作者
贊一個
回復

使用道具 舉報

25#
ID:148983 發表于 2016-11-20 12:03 | 只看該作者
先謝樓主~
回復

使用道具 舉報

26#
ID:150567 發表于 2016-11-27 16:58 | 只看該作者
挺不錯的
回復

使用道具 舉報

27#
ID:153688 發表于 2016-12-10 19:40 | 只看該作者
學習中,如果能有多點注釋就更好了
回復

使用道具 舉報

28#
ID:156912 發表于 2016-12-22 17:16 | 只看該作者
學到了,感謝樓主
回復

使用道具 舉報

29#
ID:157017 發表于 2016-12-22 22:44 | 只看該作者
可以的
回復

使用道具 舉報

30#
ID:158425 發表于 2016-12-28 18:03 | 只看該作者
不錯  支持下
回復

使用道具 舉報

31#
ID:158650 發表于 2016-12-29 16:06 | 只看該作者
午夜屠豬男 發表于 2016-2-25 18:43
**** 作者被禁止或刪除 內容自動屏蔽 ****

是的,proteus和keil兩個軟件結合
回復

使用道具 舉報

32#
ID:158650 發表于 2016-12-29 16:07 | 只看該作者
很好,功能也比較完整
回復

使用道具 舉報

33#
ID:159030 發表于 2016-12-31 11:53 | 只看該作者
學習中
回復

使用道具 舉報

34#
ID:159227 發表于 2017-1-1 18:36 | 只看該作者
真棒 ,好人一生平安。支持
回復

使用道具 舉報

35#
ID:160856 發表于 2017-1-9 11:28 | 只看該作者

沒錯沒錯,是我自己馬虎了

本帖最后由 楊文峰 于 2017-1-9 15:20 編輯

仿真執行有錯誤怎么搞?
回復

使用道具 舉報

36#
ID:160856 發表于 2017-1-9 15:19 | 只看該作者
楊文峰 發表于 2017-1-9 11:28
仿真執行有錯誤怎么搞?

對不起,文件都沒錯,是我馬虎了!
回復

使用道具 舉報

37#
ID:125593 發表于 2017-1-11 19:10 | 只看該作者
謝謝樓主的分析,很不錯
回復

使用道具 舉報

38#
ID:166896 發表于 2017-2-27 14:11 | 只看該作者
哎喲不錯啊
回復

使用道具 舉報

39#
ID:168780 發表于 2017-3-7 12:11 | 只看該作者
很給力!挺好用的
回復

使用道具 舉報

40#
ID:184702 發表于 2017-3-30 09:01 | 只看該作者
學習中,很實用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕不卡在线88 | 亚洲精品一 | 国产日韩欧美电影 | 国产精品18久久久 | 中文字幕一区在线 | 日韩精品一区二区三区中文字幕 | www.日韩在线 | 在线成人免费视频 | 国产小视频在线观看 | 一区二区三区在线免费观看 | 中文字幕欧美一区二区 | 国产在线一区观看 | 中文字幕在线一区 | 91电影在线| 免费一区二区在线观看 | 国产精品视频专区 | 日本欧美国产在线观看 | 日韩欧美不卡 | www日本在线播放 | 国产在线一区二区三区 | 欧美国产一区二区 | 黑人性hd| 一区二区三区精品视频 | 九九热免费看 | av中文字幕在线播放 | 精品国产一级片 | 久久国产精品免费一区二区三区 | 国产一区不卡 | 视频羞羞| 成人国产在线视频 | 精品无码久久久久久国产 | 一区二区精品 | 国产一区二区三区在线看 | 亚洲一区中文 | 久久丝袜| 欧美一极视频 | 久草视频观看 | 国产精品美女久久久久久免费 | 日韩aⅴ视频 | 国产精品久久久久久久久久久久久久 | 日本特黄a级高清免费大片 成年人黄色小视频 |