|
51單片機(jī)彩燈控制系統(tǒng)
有4種閃爍方式
能自動(dòng)手動(dòng)切換
淘氣彩燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (24.54 KB, 下載次數(shù): 50)
下載附件
2018-4-13 01:59 上傳
0.jpg (44.99 KB, 下載次數(shù): 58)
下載附件
2018-4-13 02:00 上傳
單片機(jī)淘氣彩燈源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- sbit Key1=P3^2; //切換狀態(tài)按鈕(外部中斷0)
- sbit Key2=P3^3;
- sbit Key3=P3^4;//暫停按鈕(外部中斷1)
- sbit p1=P1^5;///蜂鳴器控制端口
- unsigned char state=1; //狀態(tài)標(biāo)志
- unsigned int aut=1; //改變手動(dòng)自動(dòng)模式
- char F; //定義F為外部變量
- unsigned char NUM1[4]={0x7e,0xbd,0xdb,0xe7}; //第3種亮燈方式(向內(nèi))
- unsigned char NUM2[4]={0xe7,0xdb,0xbd,0x7e}; //第3種亮燈方式(向外)
- unsigned char a[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //第4種亮燈方式
- void Delay(unsigned int t) //延時(shí)函數(shù)
- {
- unsigned int i,j;
- for(i=0;i<t;i++) //用for循環(huán)嵌套來(lái)實(shí)現(xiàn)延時(shí)
- for(j=0;j<200;j++);
- }
- void Int_Init() //外部中斷初始化
- {
- IT0=1; //外部中斷0,邊沿觸發(fā)
- EX0=1; //允許中斷
- IT1=1; //外部中斷1,邊沿觸發(fā)
- EX1=1; //允許中斷
- TMOD=0x06;
- TH0=0xff;
- TL0=0xff;
- ET0=1;
- TR0=1;
- EA=1; //開(kāi)總中斷
- }
- void first()
- {
- unsigned char n;
- for(n=0;n<35;n++)
- {
- P0=0x6d;
- P2=0x6d;
- Delay(30);
- if(F== 1) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中斷的內(nèi)容
- }
- F = 0; //把外部變量清0
- }
- void second()
- {
- unsigned char m,n;
- for(m=0;m<4;m++)
- {
- P0=0xf0;
- P2=0x0f;
- Delay(100);
- P0=0xff;
- P2=0xff;
- Delay(100);
- if(F == 1 ) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中斷的內(nèi)容
- }
- for(n=0;n<4;n++)
- {
- P0=0x0f;
- P2=0xf0;
- Delay(100);
- P0=0xff;
- P2=0xff;
- Delay(100);
- if(F == 1 ) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中斷的內(nèi)容
- }
-
- F = 0; //把外部變量清0
- }
- void third()
- {
- unsigned char n;
- for(n=0;n<4;n++)
- {
- P0=NUM1[n];
- P2=NUM2[n];
- Delay(100);
- if(F == 1 ) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中
-
- }
- F = 0; //把外部變量清0
- }
- void four()
- {
- unsigned char n;
- for(n=0;n<8;n++)
- {
- P0=a[n];
- P2=a[n];
- Delay(100);
- if(F == 1 ) break; //如果按下外部中斷按鈕,立即跳出效果,執(zhí)行中斷的內(nèi)容
-
- }
-
- F = 0; //把外部變量清0
- }
- void five()
- {
-
- while(aut==0)
- {
- first();
- if(aut==1)break;
- second();
- if(aut==1)break;
- third();
- if(aut==1)break;
- four();
- if(aut==1)break;
- Delay(10);
- if(F==1) break;
- }
-
- F = 0; //把外部變量清0
- }
- /**************主函數(shù)*******************/
- void main()
- {
- Int_Init(); //外部中斷初始化
- while(1)
- { if(!(aut && state)){
- five();
- }
- else{
- if(state==1) first(); //掃描狀態(tài)標(biāo)志,為1時(shí),第一種效果
- else if(state==2) second(); //掃描狀態(tài)標(biāo)志,為2時(shí),第二種效果
- else if(state==3) third(); //掃描狀態(tài)標(biāo)志,為3時(shí),第三種效果
- else if(state==4) four(); //掃描狀態(tài)標(biāo)志,為4時(shí),第四種效果
- else
- {P0=0x00; P2=0x00;} //其他狀態(tài),八盞燈全亮,即暫停
- }
- }
- //蜂鳴器程序
- while(1){
- p1=0;
- Delay(200);
- p1=1;
- Delay(500);
- }
- }
- /************外部中斷0********************/
- void INT_0() interrupt 0
- {
- Delay(100);//消抖
- if(Key1 == 0)
- {
- F = 1;
- state++; //外部變量置1,即立即跳出效果 //按一次按鈕,狀態(tài)標(biāo)志加1
- if(state>4) state=1;
- while(Key1 == 0); //松手檢測(cè)
- }
- }
- /************外部中斷1********************/
- void INT_1() interrupt 2
- {
- Delay(100);//消抖
- if(Key2 == 0)
- {
- F=1; //外部變量置1,即立即跳出效果
- state=~state; //取反狀態(tài)標(biāo)志,按一次可暫停,使八盞燈全亮,再按一次,繼續(xù)執(zhí)行之前的操作
- while(Key2 == 0); //松手檢測(cè)
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
淘氣的彩燈.rar
(56.93 KB, 下載次數(shù): 33)
2018-4-12 22:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|