WEB
1
彩灯控制
/*头文件区域*/
#include <REGX52.H>
#include "Key.h"
#include "Seg.h"
#include <intrins.h>
/*变量声明区域*/
unsigned char Key_val,Key_down,Key_old;
unsigned char LED_mode=1;//LED运行模式
unsigned int LED500ms;//定时器固定流转时间
unsigned char Led_Data = 0x01;//LED初始值
unsigned char system_flag=1; // 0-停止 1-启动
unsigned char LED_turn[4]={0xe7, 0xdb, 0xbd, 0x7e};//模式3,4储存数据
unsigned char LED_count;//模式3,4索引
/*按键*/
void Key_proc()
{
Key_val=Key_read();
Key_down=Key_val&(Key_val^Key_old);
Key_old=Key_val;
switch(Key_down) //按键扫描
{
case 1:
LED_mode=1;
break;
case 2:
system_flag=0;
break;
case 3:
LED_mode++;
if(LED_mode==5)
LED_mode=1;
break;
case 4:
LED_mode--;
if(LED_mode==0)
LED_mode=1;
break;
}
}
/*数码管信息显示*/
/*
void Seg_proc()
{
}
*/
/*其他函数*/
/*定时器0初始化*/
void Timer0_Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}
/*定时器0中断函数*/
void Time0_server() interrupt 1
{
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
if(system_flag==1)
{
if(++LED500ms==500)
{
LED500ms=0;
switch (LED_mode)
{
case 1:
P1=Led_Data;
Led_Data = _crol_(Led_Data,1);
break;
case 2:
P1=Led_Data;
Led_Data = _cror_(Led_Data,1);
break;
case 3:
P1=LED_turn[LED_count];
LED_count++;
if(LED_count==4)
{
LED_count=0;
}
break;
case 4:
P1=LED_turn[LED_count];
if(LED_count==0)
{
LED_count=4;
}
LED_count--;
break;
}
}
}
}
/*主函数区域*/
void main()
{
Timer0_Init();
while(1)
{
Key_proc();
}
}