📄 wannianli.c
字号:
TR0 = 0;
Beeplll();
for(a=0;a<6;a++){
if(OK_Key == 0 || int_Key == 0 || Add_Key == 0 || Add2_Key == 0){
b = 200;
v = read_clock(0x83);//按键停止后设置分=V,可防止松开键后再次响
}
display ();//正常扫描显示驱动
}
}
BEEP_bit = 0;
ET0 = 1;//关定时器中断(停止显示切换)
TR0 = 1;
}else{
display ();//正常扫描显示驱动
if(v != read_clock(0x83)){//当分不再是闹钟的分时,则设置V是211 不会有冲突
v = 0xfe;
}
}
/**********************************************************************************************/
if(MENU == 0) {//时钟显示,主画面
if(OK_Key == 0){//OK键 全部LED点亮 测试用
for(bn=0;bn<32;bn++){//
Ledplay[bn] = 0xff;//将数据放入显示缓冲区
}
}
if(Add_Key == 0){//按+键显示LOGO “DOYOUNG”
bn = 0;a=0;
clearRAM();//清空显示缓冲区数据
timecount = 41;//将显示切换值调到41,使开机画面停留2秒
while(DoYoung[a] != 0x99){//显示画面“DOYOUNG”
Ledplay[bn] = DoYoung[a];//
a++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
}
if(Add2_Key == 0){//按-键显示版本号 V3.0
bn = 0;a=0;
clearRAM();//清空显示缓冲区数据
timecount = 41;//将显示切换值调到41,使开机画面停留2秒
while(V30[a] != 0x99){//显示开机画面“ALARM”
Ledplay[bn] = V30[a];//将二维数组中的一组数据放入显示缓冲区
a++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
}
if(int_Key == 0){//接MENU键 进入设置菜单
DelayM(20);//去抖
if(int_Key == 0){
key_off ();//等待键放开
ET0 = 0;//关定时器中断(停止显示切换)
TR0 = 0;
MENU++;//MENU菜单切换值加1 跳入菜单项目
Beep_set();//调时提示音
}
}
}
/**********************************************************************************************/
if(MENU >0 && MENU < 9){//ALARM1~8 闹钟设置菜单
bn = 0;a=0;
clearRAM();//清空显示缓冲区数据
while(ALARM[a] != 0x99){//显示开机画面“ALARM”
Ledplay[bn] = ALARM[a];//将二维数组中的一组数据放入显示缓冲区
a++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
putin(MENU);//显示闹钟组号
if(OK_Key == 0){//确定进入此号闹钟
DelayM(20);//去抖
if(OK_Key == 0){
key_off ();//等待键放开
Beep_set();//调时提示音
a = MENU;
MENU = 200;
b = 200;
}
}
MENUadd1 ();//菜单加1
MENUexit ();//
}
/**********************************************************************************************/
if(MENU == 200){//闹钟调时设置项
uchar y = 0;
bn = 0;//显示位累加寄存器清零(从头开始写入显示缓冲区)
clearRAM();//清空显示缓冲区数据
switch (b){//显示设置项的说明
case 200:
while(Mode[y] != 0x99){//显示开机画面“MODE”
Ledplay[bn] = Mode[y];//将二维数组中的一组数据放入显示缓冲区
y++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
putin(read_clock(0xc3+a*6));//根据闹钟组号读出设置值
break;//
case 201:
bn = 0;
clearRAM();//清空显示缓冲区数据
while(A[y] != 0x99){//显示
Ledplay[bn] = A[y];//将二维数组中的一组数据放入显示缓冲区
y++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
putin(read_clock(0xc3+a*6+2)/16);//显示(十位)
putin(read_clock(0xc3+a*6+2)%16);//显示(个位)
putin(24);//显示“时”表示
break;//
case 202:
bn = 0;
clearRAM();//清空显示缓冲区数据
while(A[y] != 0x99){//显示
Ledplay[bn] = A[y];//将二维数组中的一组数据放入显示缓冲区
y++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
putin(read_clock(0xc3+a*6+4)/16);//显示分(十位)
putin(read_clock(0xc3+a*6+4)%16);//显示分(个位)
putin(25);//显示“分”表示
break;//
}
if(OK_Key == 0){//确定进入此号闹钟
DelayM(20);//去抖
if(OK_Key == 0){
key_off ();//等待键放开
Beep_set();//调时提示音
b++;//设置下一项
if(b>202){ b = 200;}
}
}
Set_time(b,a);
MENUexit ();
}
/**********************************************************************************************/
if(MENU == 9){//TIME 调时设置项
bn = 0;a=0;
clearRAM();//清空显示缓冲区数据
while(Time[a] != 0x99){//显示开机画面“ALARM”
Ledplay[bn] = Time[a];//将二维数组中的一组数据放入显示缓冲区
a++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
MENUadd1 ();//菜单加1
MENUexit ();
if(OK_Key == 0){
DelayM(20);//去抖
if(OK_Key == 0){
key_off ();//等待键放开
Beep_set();//调时提示音
MENU = 100;
a = 1;
}
}
}
/**********************************************************************************************/
if(MENU == 100){//TIME 调时设置项
uchar y = 0;
bn = 0;//显示位累加寄存器清零(从头开始写入显示缓冲区)
clearRAM();//清空显示缓冲区数据
while(T[y] != 0x99){//显示开机画面“ALARM”
Ledplay[bn] = T[y];//将二维数组中的一组数据放入显示缓冲区
y++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
switch (a){//显示设置项的说明
case 1:
putin(read_clock(0x8d)/16);//显示年(十位)
putin(read_clock(0x8d)%16);//显示年(个位)
putin(20);//显示“年”表示
break;//
case 2:
putin(read_clock(0x89)/16);//显示(十位)
putin(read_clock(0x89)%16);//显示(个位)
putin(21);//显示“月”表示
break;//
case 3:
putin(read_clock(0x87)/16);//显示(十位)
putin(read_clock(0x87)%16);//显示(个位)
putin(22);//显示“日”表示
break;//
case 4:
putin(23);//显示“周”表示
putin(read_clock(0x8b)+9);//显示(个位)
break;//
case 5:
putin(read_clock(0x85)/16);//显示(十位)
putin(read_clock(0x85)%16);//显示(个位)
putin(24);//显示“时”表示
break;//
case 6:
putin(read_clock(0x83)/16);//显示分(十位)
putin(read_clock(0x83)%16);//显示分(个位)
putin(25);//显示“分”表示
break;//
}
Set_time(a,0);
MENUexit ();
if(OK_Key == 0){
DelayM(20);//去抖
if(OK_Key == 0){
key_off ();//等待键放开
Beep_set();//调时提示音
a++; if(a>6){ a = 1;}
}
}
}
/**********************************************************************************************/
if(MENU == 10){//正点报时设置
bn = 0;a=0;
clearRAM();//清空显示缓冲区数据
while(POINT[a] != 0x99){//显示开机画面“POINT”
Ledplay[bn] = POINT[a];//将二维数组中的一组数据放入显示缓冲区
a++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
MENUadd1 ();//菜单加1
MENUexit ();
if(OK_Key == 0){
DelayM(20);//去抖
if(OK_Key == 0){
key_off ();//等待键放开
Beep_set();//调时提示音
MENU = 101;
a = 0;
}
}
}
/**********************************************************************************************/
if(MENU == 101){//正点报时 设置项
uchar y = 0;
bn = 0;//显示位累加寄存器清零(从头开始写入显示缓冲区)
clearRAM();//清空显示缓冲区数据
while(Pp[y] != 0x99){//显示
Ledplay[bn] = Pp[y];//将二维数组中的一组数据放入显示缓冲区
y++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
write_clock(0x8e,0x00);//允许写操作
switch (a){//显示设置项的说明
case 0: break;
case 1: write_clock(0xc2,0x07);write_clock(0xc4,0x19);break;//设置正点报时为>7 <19,即8到18点
case 2: write_clock(0xc2,0x07);write_clock(0xc4,0x20);break;//
case 3: write_clock(0xc2,0x07);write_clock(0xc4,0x21);break;//
case 4: write_clock(0xc2,0x07);write_clock(0xc4,0x22);break;//
case 5: write_clock(0xc2,0x07);write_clock(0xc4,0x23);break;//
case 6: write_clock(0xc2,0);write_clock(0xc4,0x23);break;//
case 7: write_clock(0xc2,0);write_clock(0xc4,0);break;//
}
write_clock(0x8e,0x80);//禁止写操作
putin(read_clock(0xc3)%16);//显示开始时间
putin(18);//
putin(read_clock(0xc5)/16);//显示结束(十位)
putin(read_clock(0xc5)%16);//显示结束(个位)
MENUexit ();
if(OK_Key == 0){
DelayM(20);//去抖
if(OK_Key == 0){
key_off ();//等待键放开
Beep_set();//调时提示音
a++; if(a>7){ a = 1;}
}
}
}
/**********************************************************************************************/
if(MENU == 11){//闹钟总开关
bn = 0;a=0;
clearRAM();//清空显示缓冲区数据
while(ONOFF[a] != 0x99){//显示
Ledplay[bn] = ONOFF[a];//将二维数组中的一组数据放入显示缓冲区
a++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
MENUadd1 ();//菜单加1
MENUexit ();
if(OK_Key == 0){
DelayM(20);//去抖
if(OK_Key == 0){
key_off ();//等待键放开
Beep_set();//调时提示音
MENU = 102;
}
}
}
/**********************************************************************************************/
if(MENU == 102){//闹钟总开关
bn = 0;a=0;
clearRAM();//清空显示缓冲区数据
if(read_clock(0xc7) == 1){
while(Aon[a] != 0x99){//显示
Ledplay[bn] = Aon[a];//将二维数组中的一组数据放入显示缓冲区
a++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
}else{
while(Aoff[a] != 0x99){//显示
Ledplay[bn] = Aoff[a];//将二维数组中的一组数据放入显示缓冲区
a++;//换下一个提取字节
bn++;//换下一个显示缓冲字节
}
}
if(OK_Key == 0){
DelayM(20);//去抖
if(OK_Key == 0){
key_off ();//等待键放开
Beep_set();//调时提示音
write_clock(0x8e,0x00);//允许写操作
if(read_clock(0xc7) == 1){
write_clock(0xc6,0);
}else{
write_clock(0xc6,1);
}
write_clock(0x8e,0x80);//禁止写操作
}
}
MENUexit ();
}
}
}
/**********************************************************************************************/
//DoYoung.net 电子技术 --创造独立资源
/**********************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -