這是我自己設計的一個花樣霓虹燈設計,及8個led先一次亮滅,然后奇數和偶數燈閃爍,閃爍三次厚,8個燈又開始一次亮,依次循環。
用用單片機實物和proteus都試過,效果很好。
電路原理圖如下:
_3B5P26@]@VGE8{5FS5Q63L.png (6.56 KB, 下載次數: 58)
下載附件
proteus電路圖
2018-8-28 22:02 上傳
單片機源程序:
- //霓虹燈實驗: P0口接了8個燈,晶振為11.0592MHZ;
- //從D1到D8開始8個燈循環點亮一次,即D1點亮1s熄滅,依次是D8;
- //然后是間隔閃爍3次,即D1,3,5,7點亮1S熄滅,緊接著2,4,6,8點亮1s熄滅,
- //這為一次,然后循環3次。
- /*********主程序*******/
- #include <reg52.h>
- #define uchar unsigned char
- uchar i20,i8,i6; //定義三個正char:-128~127,unsigned char:0~127)
- uchar mod1,mod2 ; //定義兩種模式,沒中模式是8位,所以前面用char
- bit F; //循環標志位,用bit定義是為了節省空間
- void main ()
- {
- i20=20; //20x50ms=1s
- i8=8; //模式1有8次
- i6=6; //模式2有6次
- mod1=0x01; //0000 0001,模式1初始狀態D1滅,其他亮
- mod2=0xAA; //1010 1010,模式2初始狀態D1,3,5,7亮,其他滅
- F=0;//設置循環點亮階段標志;=0為循環點亮階段
- TMOD=0x10;//定時,T1,方式1
-
- TH1=0x4C; //11.0592*1000000/12*50*0.001=46080 ,
- //(65536-46080)/256=76...0 商是76(ox4C),余數是0(ox00)
- TL1=0x00;
- IE=0x88; //打開總中斷與T1中斷
- TR1=1;//打開T1控制位開關,在TCON寄存器中
- P1=0xF0; //針對這個實驗板子,led燈一端連著鎖存器和數碼管,
- //為了防止鎖存器數碼管干擾,首先就要先關閉位選 ,
- //因為使能在硬件始終是開著的,所以關閉位選
- while(1);
- }
- /*****T1中斷程序*********/
- void time0() interrupt 3 using 1
- {
-
- TH1=0x4C; //50ms到,中斷跳出,此時繼續裝初值,直到20次,累計到1s
- TL1=0x00;
- i20--;
- if(i20==0)
- {
- i20=20;
- if(F==0)
- {
- P0=~mod1;
- mod1=mod1<<1;
- i8-- ;
- if(i8==0)
- {
- i8=8;
- F=1;
- mod1=0x01;
- }
- }
-
- else
- {
- P0=mod2;
- mod2=~mod2;
- i6--;
- if(i6==0)
- {
- i6=6;
- F=0;
- }
- }
- }
- }
復制代碼
|