📄 led.c
字号:
#include "reg51.h"
#include "define7279.h"
#include "function.h"
unsigned int i,j,tmr,a=0;
unsigned int sg,ss,mg,ms,hg,hs;
unsigned char key_number=0,hour,min,sec,key_value[6]; //时,分,秒初值为23:59:30
//**********************主函数中完成测试基本功能并进入等待键盘状态******************
void main()
{
for (tmr=0;tmr<0x2000;tmr++); //测试
send_byte(CMD_RESET);
send_byte(CMD_TEST);
for(i=0;i<3;i++) //延时测试时间为3秒
delay10ms(100);
send_byte(CMD_RESET); //复位
delay10ms(1);
/* write7279(0x86,0x08); //最左位显8
delay10ms(50);
for(j=0;j<23;j++) //右循环3圈
{
send_byte(RTR_CYCLE);
delay10ms(50);
}
send_byte(CMD_RESET); //复位
delay10ms(1);
write7279(0x80,0x07); //最右位显7
delay10ms(50);
for(j=0;j<23;j++)
{
send_byte(RTL_CYCLE); //左循环3圈
delay10ms(50);
}
*/
keycontrol(); //进入等待键盘状态
}
//***************************清空key_value中的函数值******************************
void key_valueclean()
{
char b;
for(b=0;b<6;b++)
key_value[b]=0;
}
//*************************键盘控制程序*********************************
void keycontrol()
{
send_byte(CMD_RESET); //复位
delay10ms(1);
key_valueclean(); //清空key_value中的函数值
while(1) //键盘控制程序
{
while(a<7)
{
if(!key) //是否有键按下
{
key_number=read7279(CMD_READ);
switch(key_number)
{
case KEY_0: //0
key_value[a]=0;
out();
a++;
break;
case KEY_1: //1
key_value[a]=1;
out();
a++;
break;
case KEY_2: //2
key_value[a]=2;
out();
a++;
break;
case KEY_3: //3
key_value[a]=3;
out();
a++;
break;
case KEY_4: //4
key_value[a]=4;
out();
a++;
break;
case KEY_5: //5
key_value[a]=5;
out();
a++;
break;
case KEY_6: //6
key_value[a]=6;
out();
a++;
break;
case KEY_7: //7
key_value[a]=7;
out();
a++;
break;
case KEY_8: //8
key_value[a]=8;
out();
a++;
break;
case KEY_9: //9
key_value[a]=9;
out();
a++;
break;
case KEY_C: //开始计时
clock();
break;
case KEY_D: //开始倒计时
countdowntime();
break;
case KEY_F: //操作错误时,重新操作
a=0;
keycontrol();
break;
default:
break;
}
}
}
}
}
//*****************************在LED上显示数值*************************************
//*********************************************************************************
// 因为要显示六位数,前五位左移,最后一位不移
//*********************************************************************************
void out()
{
if(a<5)
{
write7279(DECODE1,key_value[a]);
send_byte(RTL_UNCYL);
}
else if(a==5)
{
write7279(DECODE1,key_value[a]);
}
while (!key);
}
//*****************************开始计时************************************
void clock()
{
hour=key_value[0]*10+key_value[1];
min=key_value[2]*10+key_value[3];
sec=key_value[4]*10+key_value[5];
if(hour>23||min>59||sec>59)
{
key_valueclean();
Error();
}
else
{
while(1)
{
if(sec==60) //秒为60分进1
{
min++;
sec=0;
if(min==60) //分为60时进1
{
hour++;
min=0;
if(hour==24) //时为24,时为0
hour=0;
}
}
sg=sec%10; //显示秒
ss=sec/10;
write7279(0x80,sg);
write7279(0x81,ss);
mg=min%10; //显示分
ms=min/10;
write7279(0x82,mg);
write7279(0x83,ms);
hg=hour%10; //显示时
hs=hour/10;
write7279(0x84,hg);
write7279(0x85,hs);
delay10ms(100); //延时1秒
sec++;
stopkey();
}
}
}
//*************************倒计时函数***********************************************
void countdowntime()
{
hour=key_value[0]*10+key_value[1];
min=key_value[2]*10+key_value[3];
sec=key_value[4]*10+key_value[5];
if(hour>23||min>59||sec>59)
{
key_valueclean();
Error();
}
else
{
while(1)
{
if(sec==-1) //秒记到0时
{
min--;
sec=59;
if(min==-1) //分记到0时
{
hour--;
min=59;
// if(hour==-1) //时记到0时
// hour=23;
}
}
sg=sec%10; //显示秒
ss=sec/10;
write7279(0x80,sg);
write7279(0x81,ss);
mg=min%10; //显示分
ms=min/10;
write7279(0x82,mg);
write7279(0x83,ms);
hg=hour%10; //显示时
hs=hour/10;
write7279(0x84,hg);
write7279(0x85,hs);
delay10ms(100); //延时1秒
sec--;
while(hour==0&min==0&sec==-1) //时间到时,显示要按F键
{
write7279(DECODE1,0x0f);
stopkey();
}
}
}
}
//****************************显示错误*********************************
void Error()
{
send_byte(CMD_RESET); //复位
write7279(UNDECODE+4, 0x4F); //E
write7279(UNDECODE+3, 0x05); //r
write7279(UNDECODE+2, 0x05); //r
write7279(UNDECODE+1, 0x1D); //o
write7279(UNDECODE, 0x05); //r
while(1)
{
stopkey();
}
}
//**********************************等待停止键**************************************
void stopkey(void)
{
if(!key)
{
key_number=read7279(CMD_READ); //按下F键后回到键盘等待状态
if(key_number==KEY_F)
{
a=0;
keycontrol();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -