51单片机彩灯控制(包括功能说明、原理及C程序)
关闭
GJ=0;//将G LED关闭
BJ=0;//将B LED关闭
TMOD=0X01;//寄存器工作方式
EA=1;//开总中断
TR0=1;//开定时器
ET0=1;//开定时器中断
IT0=1;
EX0=1;
TH0=(65536-50000)/256;//赋值给高位
TL0=(65536-50000)%256;//赋值给低位
if(read(0x2200)==0x03)//开机检测是否是在第三种模式下,如果下则读出断电时的数据(即颜色)
{
m=read(0x2000);//读出断电时的颜色
a=0;//将模式1关闭
b=0;//将模式2关闭
c=1;//将模式3打开
}
else
{
a=1;//将模式1打开
b=0;//将模式2关闭
c=0;//将模式3关闭
}
while(1)
xian();//调用显示子程序
}
void zhong() interrupt 1//T1中断服务程序
{
TH0=(65536-50000)/256;//赋值给高位
TL0=(65536-50000)%256;//赋值给低位
ding3++;//将按键计数器加1
}
void zhongk() interrupt 0
{
/*******************************/
/****按键处理及数据保存子程序***/
/*******************************/
EX0=0;
switch(yin)//执行一键多功能程序
{
case 0://如果0与yin比较相等,则执行break前的所有内容
delay(100);
sector(0x2200);//擦除
program(0x2200,0x02);//在0x2200地址处写入数0x02
delay(100);
yin++;//将变量加1,此句很重要,作用是以使下次按下时好执行下一开关语句
a=0;//将a变为0
c=0;
b=1;//将b变为1,即打开按键程序中的第二段程序
x=0;//清掉颜色计数变量,以便它从红色开始循环
break;//退出开关语句
case 1:
delay(100);
sector(0x2200);//擦除
program(0x2200,0x03);//在0x2200地址处写入数0x03
sector(0x2000);////擦除
program(0x2000,m);//在0x2000地址处写入变量m,以便在模式三下形成断电保护
delay(100);
yin++;//将变量加1,此句很重要,作用是以使下次按下时好执行下一开关语句
b=0;
c=1;//打开第三种模式标志位,即锁定状态
a=0;
x=0;//清掉颜色计数变量,以便它从红色开始循环
break;//退出开关语句
case 2:
delay(100);
sector(0x2200);//擦除
program(0x2200,0x01);//在0x2200地址处写入数0x01
delay(100);
b=0;//将b变为0,即关闭上一次功能
c=0;//关闭上前面的功能
a=1;//打开第1次功能,即0.5秒循环闪烁
yin=0;
x=0;//清掉颜色计数变量,以便它从红色开始循环
break;//退出开关语句
}
delay(255);
EX0=1;
}
- 关于RTX51 TINY的分析与探讨(05-30)
- 浅析8051模块化编程技巧(05-28)
- 基于DSP和单片机通信的液晶显示设计方案(07-20)
- 锁相环控制及初始化简析(08-27)
- 基于MSP430自动胀管控制器的研究(09-07)
- 嵌入式C实现延时程序的不同变量的区别(03-01)
