簡易霓虹燈控制器
(1)用發光二極管代替霓虹燈閃爍,具有多種閃爍效果,能自動切換;
(2)控制器的啟動由一啟動按鍵控制,當啟動2小時后能整個控制系統自動斷電(包括單片機也斷電),
一、主要材料
發光二極管 9個;
STC89c52單片機 1個;
單片機插座 1個;
11.0592MHZ的晶振 1個;
20pf電容*2,10uf電容 1個;
共陽數碼管 6個
三極管6個;
電阻10k 1個;
電阻330 16個;
電源
三.硬體組成
1. 復位部分

2. 晶振部分

3.二極管部分

4.時鐘顯示部分

5.自動斷電電路

6.全部電路

四.代碼部分
//可以看前面一篇的文章里面有介紹,有什么不對的地方可以私信我
#include <at89x52.h>
///
void delay(unsigned long t)
{ unsigned long i;
for(i=0;i<t;i++) {;}
}
///
unsigned char x;
unsigned char y;
unsigned char z;
main()
{ unsigned char led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char seg[6]={0x80,0x40,0x20,0x10,0x08,0x04};
unsigned char buf[6]; //buf[0] \buf[1] \.....buf[5]
unsigned char i;
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
buf[0]=x%100/10; buf[1]=x%10/1;
buf[2]=y%100/10; buf[3]=y%10/1;
buf[4]=z%100/10; buf[5]=z%10/1;
for(i=0;i<6;i++)
{
if((i==1)||(i==3)) P0=~(led[ buf[i] ]|0x80);
else P0=~led[ buf[i] ];
P2=~seg[i];
delay(10);
}
if(z%3==0)
{
P1=0x55;
}
else if(z%5==0)
{
P1=0xab;
}
else if(z%7==0)
{
P1=0xf0;
}
else if(z%7==0)
{
P1=0x0f;
}
/控制時間斷電
if(z==10 && y==1 )
{
P1_0=0; //一分鐘10秒斷電
}
///
}
}
/
unsigned char cnt=0;
void t0_s(void) interrupt 1 //T0
{ TF0=0;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
cnt++;
if(cnt==20 ) {z++; cnt=0;}
if(z==60) {y++; z=0;}
if(y==60) {x++; y=0;}
if(x==24) {x=0;}
}
/
五.學習心得
做這個作品的時候最難的部分不是代碼部分,而是能夠控制啟動2小時后自動斷電(包括單片機也斷電),也在平臺上找了很多(單片機 一鍵開關機 軟體結合)有焊接過里面的一些電路圖 確實能夠得到我想要的功能但還是有一些問題:
1.單片機里的漏電流導致的輸出的電壓一直不能小于三極管的截至電壓
2.在單片機輸出低電平的時候在小于3.5-3V時單片機混亂了又重新經過上拉電阻給重新上電
經過我單片機老師的講解給換成了5v的繼電器 繼電器就沒有那么多的問題一到沒有吸和的電壓就斷開,還行整挺好,
把單片機的1.0給繼電器做判斷的腳,因為單片機內部是有個下拉電阻好用
還有在中斷里面就不要用長時間的delay那樣會造成數碼管顯示的穩定性
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287682.html
標籤:其他
