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

QQ登錄

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

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

單片機(jī)鍵控淘氣彩燈控制源碼與proteus仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
51單片機(jī)彩燈控制系統(tǒng)
有4種閃爍方式
能自動(dòng)手動(dòng)切換

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


單片機(jī)淘氣彩燈源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. sbit Key1=P3^2; //切換狀態(tài)按鈕(外部中斷0)
  4. sbit Key2=P3^3;
  5. sbit Key3=P3^4;//暫停按鈕(外部中斷1)
  6. sbit p1=P1^5;///蜂鳴器控制端口
  7. unsigned char state=1; //狀態(tài)標(biāo)志
  8. unsigned int aut=1;        //改變手動(dòng)自動(dòng)模式
  9. char F; //定義F為外部變量
  10. unsigned char NUM1[4]={0x7e,0xbd,0xdb,0xe7}; //第3種亮燈方式(向內(nèi))
  11. unsigned char NUM2[4]={0xe7,0xdb,0xbd,0x7e}; //第3種亮燈方式(向外)
  12. unsigned char a[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //第4種亮燈方式
  13. void Delay(unsigned int t) //延時(shí)函數(shù)
  14. {
  15.   unsigned int i,j;
  16.   for(i=0;i<t;i++) //用for循環(huán)嵌套來(lái)實(shí)現(xiàn)延時(shí)
  17.   for(j=0;j<200;j++);
  18. }
  19. void Int_Init() //外部中斷初始化
  20. {  
  21.   IT0=1; //外部中斷0,邊沿觸發(fā)
  22.   EX0=1; //允許中斷
  23.   IT1=1; //外部中斷1,邊沿觸發(fā)
  24.   EX1=1; //允許中斷
  25.   TMOD=0x06;
  26.   TH0=0xff;
  27.   TL0=0xff;
  28.   ET0=1;
  29.   TR0=1;

  30.   EA=1; //開(kāi)總中斷
  31. }
  32. void first()
  33. {
  34. unsigned char n;
  35. for(n=0;n<35;n++)
  36. {
  37.   P0=0x6d;        
  38.   P2=0x6d;
  39.   Delay(30);
  40.   if(F== 1) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中斷的內(nèi)容

  41. }
  42.    F = 0; //把外部變量清0
  43. }
  44. void second()
  45. {
  46. unsigned char m,n;
  47. for(m=0;m<4;m++)
  48. {
  49.     P0=0xf0;
  50.     P2=0x0f;
  51.     Delay(100);
  52.     P0=0xff;
  53.     P2=0xff;
  54.     Delay(100);
  55.     if(F == 1 ) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中斷的內(nèi)容
  56. }
  57.   for(n=0;n<4;n++)
  58.    {
  59.     P0=0x0f;
  60.     P2=0xf0;
  61.     Delay(100);
  62.     P0=0xff;
  63.         P2=0xff;
  64.         Delay(100);
  65.     if(F == 1 ) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中斷的內(nèi)容
  66.    }
  67.             
  68.     F = 0;        //把外部變量清0
  69. }
  70. void third()
  71. {  
  72. unsigned char n;
  73. for(n=0;n<4;n++)
  74. {
  75.    P0=NUM1[n];
  76.    P2=NUM2[n];
  77.    Delay(100);
  78.    if(F == 1 ) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中
  79.    
  80. }

  81.    F = 0; //把外部變量清0
  82. }
  83. void four()
  84. {
  85.   unsigned char n;
  86.   for(n=0;n<8;n++)
  87.   {
  88.    P0=a[n];
  89.    P2=a[n];
  90.    Delay(100);
  91.    if(F == 1 ) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中斷的內(nèi)容
  92.    
  93.   }
  94.    
  95.    F = 0; //把外部變量清0
  96. }

  97. void five()
  98. {
  99.   
  100. while(aut==0)
  101.   {       
  102.      first();
  103.          if(aut==1)break;
  104.          second();
  105.           if(aut==1)break;
  106.           third();
  107.           if(aut==1)break;
  108.          four();
  109.          if(aut==1)break;
  110.          Delay(10);
  111.          if(F==1) break;
  112.          }
  113.           
  114.            F = 0; //把外部變量清0
  115. }

  116. /**************主函數(shù)*******************/
  117. void main()
  118. {
  119.   Int_Init(); //外部中斷初始化
  120.   while(1)
  121.   {  if(!(aut && state)){
  122.              five();       
  123.                   }
  124.   else{
  125.      if(state==1) first(); //掃描狀態(tài)標(biāo)志,為1時(shí),第一種效果
  126.         else if(state==2) second(); //掃描狀態(tài)標(biāo)志,為2時(shí),第二種效果
  127.         else if(state==3) third(); //掃描狀態(tài)標(biāo)志,為3時(shí),第三種效果
  128.     else if(state==4) four(); //掃描狀態(tài)標(biāo)志,為4時(shí),第四種效果
  129.         else  
  130.     {P0=0x00; P2=0x00;} //其他狀態(tài),八盞燈全亮,即暫停
  131.   }
  132.   }       
  133.   //蜂鳴器程序
  134.   while(1){
  135.    p1=0;
  136.    Delay(200);
  137.    p1=1;
  138.    Delay(500);                 
  139. }
  140. }
  141. /************外部中斷0********************/
  142. void INT_0() interrupt 0
  143. {
  144.   Delay(100);//消抖
  145.    if(Key1 == 0)
  146.   {
  147.    F = 1;
  148.    state++; //外部變量置1,即立即跳出效果 //按一次按鈕,狀態(tài)標(biāo)志加1
  149.    if(state>4)  state=1;
  150.    while(Key1 == 0); //松手檢測(cè)
  151.   }
  152. }
  153. /************外部中斷1********************/
  154. void INT_1() interrupt 2
  155. {
  156.    Delay(100);//消抖
  157.    if(Key2 == 0)
  158.     {
  159.          F=1; //外部變量置1,即立即跳出效果
  160.          state=~state; //取反狀態(tài)標(biāo)志,按一次可暫停,使八盞燈全亮,再按一次,繼續(xù)執(zhí)行之前的操作
  161.      while(Key2 == 0); //松手檢測(cè)
  162.     }

  163. }
  164. ……………………

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

所有資料51hei提供下載:

淘氣的彩燈.rar (56.93 KB, 下載次數(shù): 33)


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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