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

QQ登錄

只需一步,快速開始

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

單片機(jī)紅綠燈設(shè)計(jì)源代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char

  3. uchar led[ ]={0x3f,0x06,0x5b,0x4f,0x66,
  4. 0x6d,0x7d,0x07,0x7f,0x6f};
  5. void delay_ms(uchar j)   //延時(shí)若干ms
  6. {
  7.         uchar i;       
  8.         while(j--)       
  9.         {
  10.         for(i=0;i<125;i++)
  11.         for(i=0;i<125;i++);
  12.         }
  13. }
  14. void delay_s(uchar i)  //延時(shí)i秒鐘
  15. {
  16.         unsigned char a,b,c;   
  17.         while(i--)   
  18.         {
  19.         for(c=167;c>0;c--)
  20.         for(b=171;b>0;b--)
  21.         for(a=16;a>0;a--);
  22.         }
  23. }
  24. void dongxi(uchar a)   //東西綠燈  南北紅燈
  25. {
  26.     uchar j=100;  //循環(huán)100次
  27.     for(a;a>0;a--)
  28.     {
  29.         P1=0X09;delay_ms(5);
  30.         while(j--)       
  31.         {
  32.             P0=0Xfb;       
  33.             P2=led[a/10];  //顯示十位倒計(jì)時(shí)
  34.             delay_ms(5);   
  35.   P0=0Xf7;       
  36. P2=led[a%10];   //顯示個(gè)位倒計(jì)時(shí)
  37. delay_ms(5);        
  38. if(a<=3)   //如果a小于3,則開始黃燈閃爍
  39. {
  40.     P1=0X12;  
  41.     delay_ms(5);
  42.     P1=0X00;
  43.     delay_ms(5);
  44. }
  45. }}}
  46.   void nanbei(uchar a)   //南北綠燈  東西紅燈
  47. {
  48.     uchar j=100;
  49.     for(a;a>0;a--)
  50.     {   
  51.         P1=0X24;
  52.         delay_ms(5);
  53.         while(j--)       
  54.         {
  55.             P0=0Xfe;
  56.             P2=led[a/10];   //顯示十位倒計(jì)時(shí)
  57.             delay_ms(5);   
  58.                  P0=0Xfd;       
  59. P2=led[a%10];   //顯示個(gè)位倒計(jì)時(shí)               
  60. delay_ms(5);
  61. if(a<=3)   //如果a小于3,則開始黃燈閃爍               
  62. {
  63. P1=0X12;
  64. delay_ms(5);                        
  65. P1=0X00;       
  66. delay_ms(5);
  67. }
  68. }}}
  69. void main()
  70. {
  71.     EA=1;   //允許中斷
  72.     EX0=1;   //允許外部中斷0
  73.     IT0=1;   //跳沿觸發(fā)
  74.     while(1)
  75.     {       
  76.         dongxi(10);   //東西通行時(shí)間10秒
  77.         nanbei(10);   //南北通行時(shí)間10秒
  78.     }
  79. }
  80. void int0() interrupt 0   //外部中斷0函數(shù)
  81. {                  
  82.     uchar i;
  83.     EA=0;
  84.     P0=0xff;
  85.     for(i=5;i>0;i++)
  86.     {       
  87.         P1=0X12;
  88.         delay_ms(10);
  89.         P1=0X00;
  90.         delay_ms(10);
  91.     }
  92.     P1=0x0c;
  93.     delay_s(5);
  94.     EA=1;        
  95. }




  96. #include<reg51.h>
  97. #define u8 unsigned char
  98. #define u16 unsigned int
  99. sbit s1=P3^2;//應(yīng)急通行
  100. u8 code display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數(shù)碼管0---9
  101. u8 buf[2]={1,0};//初始顯示10
  102. u8 num;//1s計(jì)時(shí)
  103. u8 time=10;//10s倒計(jì)時(shí)
  104. bit flag=0;
  105. void time0_init()
  106. {
  107.         TMOD=0x01;//定時(shí)器0,工作于方式1
  108.         TH0=(65535-50000)/256;//定時(shí)50ms
  109.         TL0=(65535-50000)%256;
  110.         ET0=EA=TR0=1;
  111. }
  112. void delayms(u16 x)//毫秒延時(shí)函數(shù)
  113. {
  114. u16 i,j;
  115. for(i=0;i<x;i++)      //連數(shù)x次,約 x ms
  116. for(j=0;j<120;j++);   //數(shù)120 次,約1 ms
  117. }
  118. void scan()//數(shù)碼管掃描函數(shù)
  119. {
  120.         P0=0xfa;P2=display[buf[1]];
  121.         delayms(5);
  122.         P0=0xf5;P2=display[buf[0]];
  123.         delayms(5);
  124. }
  125. void convert(u8 dat)//將數(shù)據(jù)轉(zhuǎn)成適合數(shù)碼管顯示的數(shù)
  126. {
  127.         buf[1]=dat/10;
  128.         buf[0]=dat%10;
  129. }
  130. void main()//主函數(shù)
  131. {
  132.         EA=1;
  133.         EX0=1;
  134.         IT0=1;
  135.         time0_init();//初始化
  136.         flag=1;
  137.         while(1)
  138.         {
  139.                 convert(time);//正常數(shù)據(jù)轉(zhuǎn)換
  140.                 scan();//倒計(jì)時(shí)顯示
  141.                 if(flag==0)
  142.                 {       
  143.                         P1=0x24;
  144.                         if(time<=3){P1=0x12;}
  145.                 }
  146.                 else if(flag==1)
  147.                 {
  148.                         P1=0x09;
  149.                         if(time<=3){P1=0x12;}
  150.                 }
  151.         }               
  152. }                  
  153. void time0()interrupt 1
  154. {
  155.         TH0=(65535-50000)/256;//定時(shí)50ms
  156.         TL0=(65535-50000)%256;
  157.         num++;
  158.         if(num==20)//1s時(shí)間
  159. ……………………

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

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


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

使用道具 舉報(bào)

沙發(fā)
ID:838086 發(fā)表于 2020-11-19 11:23 | 只看該作者
程序有錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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