请问怎么改我这个程序可以让选中的时间闪烁,在线等,急!!!
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;
typedef unsigned char u8;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00,0x80 };//数码管显示0-9和-的断码
/*定义全局变量*/
unsigned int counter; //定义计数数据
unsigned char mode; //定义模式
unsigned char second=0,minute=0;hour=12;//定义秒分时的初始值
unsigned char ADD_bit=0,DEC_bit=0,flag=0;//加标志位和减标志位赋初值
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
/*定义按键*/
sbit k1=P3^1; //按键P3^1调节模式变化
sbit ADD=P3^0; //按键P3^0实现加一
sbit DEC=P3^2; //按键P3^2实现减一
sbit k4=P3^3; // 按键P3^3调闹钟 暂时不会
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
void Digdisplay()
{
LSA=1;LSB=1;LSC=1; //7
P0=smgduan;delay(10);P0=smgduan;//间隔一段时间扫描,消隐
LSA=0;LSB=1;LSC=1; //6
P0=smgduan;delay(10);P0=smgduan;
LSA=0;LSB=0;LSC=1; //4
P0=smgduan;delay(10);P0=smgduan;
LSA=1;LSB=1;LSC=0; //3
P0=smgduan;delay(10);P0=smgduan;
if(counter>0&&counter<49)
{ LSA=1;LSB=1;LSC=0; P0=0x80;delay(10);
}
else
{LSA=1;LSB=1;LSC=0; P0=0x80;}
LSA=1;LSB=0;LSC=0; //1
P0=smgduan+0x80;delay(10);P0=smgduan;
LSA=0;LSB=0;LSC=0; //0
P0=smgduan;delay(10);P0=smgduan;
LSA=0;LSB=1;LSC=0; //2
P0=smgduan;delay(1);P0=smgduan;
LSA=1;LSB=0;LSC=1; //5
P0=smgduan;delay(1);P0=smgduan;
}
/*按键扫描*/
void Buttonscan()
{
/*通过标志位来控制模式*/
if(k1==0)//控制模式键 按下
{
flag=1; //确定按键按下
}
if((k1)&&(flag))
{
flag=0;
mode++;
if(mode==4)
mode=0;
}
if(mode==1) //加减秒
{
/*加按键*/
if(ADD==0)//加键按下
{
ADD_bit=1;
}
if((ADD)&&(ADD_bit))
{
ADD_bit=0;
second++;
if(second==60)
second=0;
}
/*减按键*/
if(DEC==0)
{
DEC_bit=1; //按下按键
}
if((DEC)&&(DEC_bit==1))
{
DEC_bit=0;
if(second==0)
second=59;
second--;
}
}
if(mode==2) //加减分
{
if(ADD==0)
{
ADD_bit=1;
}
if((ADD)&&(ADD_bit))
{
ADD_bit=0;
minute++;
if(minute==60)
minute=0;
}
if(DEC==0)
{
DEC_bit=1;
}
if((DEC)&&(DEC_bit==1))
{
DEC_bit=0;
if(minute==0)
minute=60;
minute--;
}
}
if(mode==3) //加减时
{
if(ADD==0)
{
ADD_bit=1;
}
if((ADD)&&(ADD_bit))
{
ADD_bit=0;
hour++;
if(hour==24)
hour=0;
}
if(DEC==0)
{
DEC_bit=1;
}
if((DEC)&&(DEC_bit==1))
{
DEC_bit=0;
if(hour==0)
hour=24;
hour--;
}
}
}
/*初始化*/
void time0Init()
{
TMOD=0x01; //设置定时器模式一
TH0=0xd8;//高八位赋初值
TL0=0xf0;//低八位赋初值
TR0=1;//启动定时器0计数
ET0=1;//使能定时器中断
EA=1;//使能总中断
}
/*主函数*/
void main()
{
time0Init();//初始化函数
while(1)
{
Digdisplay(); //显示函数
Buttonscan(); //按键
}
}
/*中断*/
void time0() interrupt 1
{
TH0=0xd8;//高八位赋初值
TL0=0xf0;//低八位赋初值
counter++;
if(counter==100)
{
counter=0;
second++;//秒加1
if(second==60)
{
second=0;
minute++;//分加1
if(minute==60)
{
minute=0;
hour++;//时加1
if(hour==24)
hour=0;
}
}
}
}
页:
[1]