找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

手工焊接的單片機(jī)的紅綠燈系統(tǒng)制作資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我做的一個(gè)基于51單片機(jī)的紅綠燈系統(tǒng)自己手工焊接

內(nèi)附硬件圖
分別有兩個(gè)按鈕控制正道和側(cè)道交通燈的情況
一個(gè)按鈕處理突發(fā)情況的情況,即全部燈變?yōu)榧t燈



單片機(jī)源程序如下:
  1. #include"reg52.h"
  2. //腳定義
  3. sbit Adaoyouche=P3^2;        //將Adaoyouche定義為P3_2腳
  4. sbit Bdaoyouche=P3^3;
  5. sbit jinji=P3^4;

  6. //函數(shù)聲明
  7. void display(int miao);        //顯示子函數(shù)聲明
  8. void time_init();                        //定時(shí)器使能子函數(shù)聲明
  9. void delay(unsigned int t);  //延時(shí)子函數(shù)聲明
  10. void dingshi();                            //定時(shí)子函數(shù)聲明
  11. void deng();                          //亮燈模式控制子函數(shù)聲明
  12. //變量定義
  13. int i=1,l=0,tt=0;  //定義全局變量
  14. unsigned char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示數(shù)字0-9

  15. main()
  16. {
  17.          time_init();  //定時(shí)器使能
  18.          Adaoyouche=1;
  19.          Bdaoyouche=1;
  20.          jinji=1;
  21.          while(1)
  22.          {
  23.                  display(i);                 //顯示i
  24.                  if(Adaoyouche==0)  //按鍵功能
  25.                  {         
  26.                      l=0;  //A車(chē)道綠燈模式
  27.                          i=1;         //當(dāng)i=0,tt=0時(shí)進(jìn)入模式選擇
  28.                          tt=0;
  29.                  }
  30.                  if(Bdaoyouche==0)
  31.                  {         
  32.                      l=2;        //B車(chē)道綠燈模式
  33.                          i=1;
  34.                          tt=0;
  35.                  }
  36.                  if(jinji==0)
  37.                  {         
  38.                      l=4; //緊急雙紅燈模式
  39.                          i=1;
  40.                          tt=0;
  41.                  }
  42.                  deng(); //亮燈模式控制
  43.                  delay(300); //短暫延時(shí)
  44.      }
  45. }
  46. //定時(shí)器使能子函數(shù)
  47. void time_init()
  48. {
  49.     tt=0;
  50.     TMOD=0X01;                //設(shè)置定時(shí)器1為模式一,即16位計(jì)算模式
  51.         TH0=(65536-50000)/256;        //給計(jì)數(shù)寄存器賦值,50毫秒時(shí)間
  52.         TL0=(65536-50000)%256;
  53.         EA=1;                //開(kāi)啟總中斷
  54.         ET0=1;                //開(kāi)啟定時(shí)器0中斷
  55.         TR0=1;                //啟動(dòng)定時(shí)器
  56. }
  57. //中斷函數(shù),關(guān)鍵字"interrupt" , 這是C語(yǔ)言的中斷函數(shù)表示法,1表時(shí)定地器0
  58. void dingshi() interrupt 1
  59. {
  60.     TH0=(65536-50000)/256;        //重新給計(jì)數(shù)寄存器賦值,50毫秒時(shí)間
  61.         TL0=(65536-50000)%256;
  62.         tt--;                                   //  每50毫秒tt就減1,tt從20減到0為1秒
  63. }
  64. //顯示子函數(shù)
  65. void display(int miao)
  66. {
  67.     P0=0xff;   //P0數(shù)據(jù)清0,數(shù)碼管為0亮1滅。
  68.         P1=0xaa;   //開(kāi)啟十位
  69.         P0=table[miao/10];//顯示十位
  70.         delay(500);           //短暫延時(shí)
  71.         P0=0xff;
  72.         P1=0x55;  //開(kāi)啟個(gè)位
  73.         P0=table[miao%10];//顯示個(gè)位
  74.          
  75. }
  76. //亮燈模式控制子函數(shù)
  77. void deng()
  78. {
  79.      if(tt==0)// 每50毫秒tt就減1,tt從20減到0為1秒,當(dāng)tt=0時(shí)i就減1,i為倒數(shù)時(shí)間。
  80.          {
  81.                 i=i-1;
  82.                 if(i==0)//當(dāng)i=0時(shí)判斷下一步要亮的燈
  83.                 {
  84.                          switch(l)
  85.                      {
  86.                                  case 0: //l=0,A道綠燈50秒
  87.                                         i=50;
  88.                                     P2=0x78;  //燈為0亮1滅。A道紅黃綠燈分別接了P2的4、3、2腳,B道紅黃綠燈分別接了P2的7、6、5腳。0x78為0111 1000
  89.                                         break;
  90.                                  case 1:   //l=1,A道黃燈10秒
  91.                                         i=10;
  92.                                     P2=0x74;
  93.                                         break;
  94.                                 case 2:         //l=2,B道黃燈25秒
  95.                                         i=25;
  96.                                         P2=0xcc;
  97.                                         break;
  98.                                 case 3:                 //l=3,B道黃燈5秒
  99.                                         i=5;
  100.                                         P2=0xac;
  101.                                         break;
  102.                                 case 4:                   //l=4,A,B兩道紅燈99秒
  103.                                         i=99;
  104. ……………………

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

所有資料51hei提供下載:
紅綠燈.zip (902.41 KB, 下載次數(shù): 10)



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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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