简易霓虹灯控制器
作者:互联网
简易霓虹灯控制器
(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那样会造成数码管显示的稳定性
标签:10,控制器,单片机,霓虹灯,unsigned,char,简易,buf,断电 来源: https://blog.csdn.net/py_taotao/article/details/117751866