{
while(!shezhi)xianshi();//如果确认按下按键等待按键释
放,
//没有释放则一直执行数码管扫
描,防止闪烁
}
{
TR0=0;
xuanze1++;
if (xuanze1==4) xuanze1=0; } }
if (!jia)//P3.3加1按钮 {
xianshi(); if(!jia) {
while(!jia)xianshi(); {
if(xuanze1==1) shi++;
if(shi==24) shi=0;
if(xuanze1==2) fen++;
if (fen==60) fen=0;
if(xuanze1==3) miao++;
if(miao==60) miao=0; } } }
if(flag==1)//闪烁标志位为1,所有数码管都亮,与下面的flag=0
构成闪烁程序
{
if (shi<10) //灭零判断,如果小时数小于10则第一位
数码管熄灭
duan1=0xff; else
duan1=table[shi/10]; //分解显示信息
}
duan2=table[shi]; duan3=table[fen/10]; duan4=table[fen]; duan5=table[miao/10]; duan6=table[miao];
if(flag==0)//闪烁标志位为0,对应数码管熄灭 {
if(xuanze1==1) {
duan1=0xff;//当设置小时时,第一二位数码管闪烁
duan2=0xff; }
if(xuanze1==2) {
duan3=0xff; duan4=0xff; }
if(xuanze1==3) {
duan5=0xff; duan6=0xff; } }
xianshi(); j++;
if(20==j) //延时闪烁时间 {
j=0;
flag=!flag;//闪烁标志变量
} } }
/*------------------------------------------------ 定时器中断子程序
------------------------------------------------*/ void Timer0_isr(void) interrupt 1 using 1 {
static unsigned int i;
TH0=(65536-9216)/256; 期0.9216uS // TL0=(65536-9216)%6; //
//10x100=1000ms=1s i++;
if(i==100) {
i=0; miao++;
if(miao==60) {
miao=0; fen++; }
if(fen==60) {
fen=0; shi++; }
if(shi==24) {
shi=0; } } }
重新赋值 11.0592M晶振计算,指令周
最大值65536 即60.398ms 所以 直接定时器不够用,需要用循环处理, 定时10ms,然后循环100次后输出
//