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

QQ登錄

只需一步,快速開始

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

STC89C52單片機(jī)交通燈(計(jì)數(shù)器實(shí)現(xiàn))+Proteus仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1097346 發(fā)表于 2024-5-8 11:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include <REGX52.H>
  2. void YellowShan2();
  3. void YellowShan1();
  4. void delay_s(num);
  5. void delay_ms(num);
  6. void delay_us(num);
  7. void NBX();
  8. void DXX();
  9. void Timer0_Init();
  10. sbit r1=P1^2;
  11. sbit y1=P1^3;
  12. sbit g1=P1^4;
  13. sbit r2=P1^5;
  14. sbit y2=P1^6;
  15. sbit g2=P1^7;
  16. unsigned int num1=0;
  17. unsigned int num2;

  18. void main()
  19. {
  20.         Timer0_Init();
  21.         r1=0;
  22.         y1=0;
  23.         g1=0;
  24.         r2=0;
  25.         y2=0;
  26.         g2=0;
  27.         while(1)
  28.         {
  29.                 if (num2==0)
  30.                 {
  31.                         NBX();
  32.                 }
  33.                 else if (num2==1)
  34.                 {
  35.                         YellowShan1();
  36.                 }
  37.                 else if (num2==2)
  38.                 {
  39.                         DXX();
  40.                 }
  41.                 else if (num2==3)
  42.                 {
  43.                         YellowShan2();
  44.                 }
  45.         }
  46. }
  47. void YellowShan1()
  48. {
  49.                 r1=1;
  50.                 y1=0;
  51.                 g1=0;
  52.                 r2=0;
  53.                 y2=1;
  54.                 g2=0;
  55.                 delay_ms(25);
  56.                 r1=1;
  57.                 y1=0;
  58.                 g1=0;
  59.                 r2=0;
  60.                 y2=0;
  61.                 g2=0;
  62.                 delay_ms(25);
  63. }
  64. void YellowShan2()
  65. {
  66.                 r1=0;
  67.                 y1=1;
  68.                 g1=0;
  69.                 r2=1;
  70.                 y2=0;
  71.                 g2=0;
  72.                 delay_ms(25);
  73.                 r1=0;
  74.                 y1=0;
  75.                 g1=0;
  76.                 r2=1;
  77.                 y2=0;
  78.                 g2=0;
  79.                 delay_ms(25);
  80. }
  81. void delay_us(unsigned int num)
  82. {
  83.         unsigned int i=0,j=0;        
  84.         for(i=0;i<num;i++)
  85.         {
  86.                 for(j=0;j<20;j++);
  87.         }
  88. }
  89. void delay_ms(unsigned int num)
  90. {
  91.         while(num--!=0)         
  92.         {
  93.                 delay_us(100);
  94.         }
  95. }
  96. void delay_s(unsigned int num)
  97. {
  98.         while(num--!=0)         
  99.         {
  100.                 delay_ms(60);
  101.         }
  102. }
  103. void NBX()
  104. {
  105.         r1=1;
  106.         y1=0;
  107.         g1=0;
  108.         r2=0;
  109.         y2=0;
  110.         g2=1;
  111. }
  112. void DXX()
  113. {
  114.         r1=0;
  115.         y1=0;
  116.         g1=1;
  117.         r2=1;
  118.         y2=0;
  119.         g2=0;
  120. }
  121. void Timer0_Init()  // 定時(shí)器0初始化函數(shù)  
  122. {  
  123.     TMOD &= 0xF0;  // 清除Timer0模式位  
  124.     TMOD |= 0x01;  // 設(shè)置Timer0為模式1(16位定時(shí)/計(jì)數(shù)器模式)  
  125.     TH0 = (65536 - 50000) / 256;  // 設(shè)置定時(shí)器初值,這里設(shè)置為50ms溢出一次  
  126.     TL0 = (65536 - 50000) % 256;  
  127.     ET0 = 1;  // 使能Timer0中斷  
  128.     EA = 1;  // 使能全局中斷  
  129.     TR0 = 1;  // 啟動(dòng)Timer0  
  130. }
  131. void Timer0_ISR (void) interrupt 1  // Timer0中斷服務(wù)程序  
  132. {  
  133.                 static unsigned int count = 0;  // 靜態(tài)變量,用于計(jì)數(shù)  
  134.     TH0 = (65536 - 50000) / 256;  // 重新加載定時(shí)器初值  
  135.     TL0 = (65536 - 50000) % 256;  
  136.     count++;  // 計(jì)數(shù)器加1  
  137.     if (count >= 5)  // 如果計(jì)數(shù)到20,即1秒到達(dá)  
  138.     {  
  139.         count = 0;  // 清零計(jì)數(shù)器  
  140.         // 在這里添加需要每秒執(zhí)行的操作,例如更新LED狀態(tài)、打印日志等  
  141.                         
  142.                  num1++;
  143.                 if(num1==50)
  144.                         {
  145.                                 num2=1;
  146.                         }
  147.                 else if(num1==60)
  148.                         {
  149.                                 num2=2;
  150.                         }
  151.                 else if(num1==110)
  152.                         {
  153.                                 num2=3;
  154.                         }        
  155.                 else if(num1==120)
  156.                         {
  157.                                 num2=0;
  158.                                 num1=0;
  159.                         }               
  160.         }
  161. }
復(fù)制代碼

Proteus仿真是8.17版本的,其他版本打開會(huì)報(bào)錯(cuò): 交通燈.7z (193.18 KB, 下載次數(shù): 12)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:961114 發(fā)表于 2024-5-8 17:27 | 只看該作者
還得是STC8H8K64U 帶硬件USB,可以USB仿真 USB下載   
軟件仿真可以淘汰了
回復(fù)

使用道具 舉報(bào)

板凳
ID:406814 發(fā)表于 2024-6-7 00:51 | 只看該作者
STC89C52 的庫文件可以分享一下嗎? 我不缺例子,我缺的是STC89C52 的proteus使用的lib文件
回復(fù)

使用道具 舉報(bào)

地板
ID:253767 發(fā)表于 2024-6-7 06:11 | 只看該作者
durongze 發(fā)表于 2024-6-7 00:51
STC89C52 的庫文件可以分享一下嗎? 我不缺例子,我缺的是STC89C52 的proteus使用的lib文件

我也是這樣。請(qǐng)樓主給予分享。謝謝。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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