#include<reg52.h>
#define uchar unsigned char
Seg[]={0X3f,0X06,0X5b,
0X4f,0X66,0X6d,
0X7d,0X07,0X7f,
0X6f,0X40,0X00};//数码竹!1~9和一的段码
unsigned char Com[]={0X7f,0Xbf,0Xdf,
0Xef,0Xf7,0Xfb,
0Xfd,0Xfe,0Xff}//数码管亮灭的数组
/定义全局变量/
unsigned int counter; //定义计数数据
unsigned char sign; //定义闪烁标志位
unsigned char mode; //定义模式
unsigned char second=0,minute=0,hour=12; //定义秒分时的初值
unsigned char ADD_bit=0,DEC_bit=0,flag=0; //加减标志位赋初值0
/定义按键/
sbit ms=P1^0; //按键P0^0调节模式变化
sbit ADD=P1^1; //按键P1^1实现加一
sbit DEC=P1^2; //按键P1^2实现减一
/延时函数/
void delay(unsigned int t)
{ while(--t); }
/数码管扫描/
void Segplay()
{/模式0 正常模式*/
if(mode==0){
P0=Seg[second%10];P2=Com[7]; delay (50); P2=Com[8];
P0=Seg[second/10]; P2=Com[6]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[5]; delay (50); P2=Com[8];
P0=Seg[minute%10]; P2=Com[4]; delay (50); P2=Com[8];
P0=Seg[minute/10]; P2=Com[3]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[2]; delay (50); P2=Com[8];
P0=Seg[hour% 10]; P2=Com[1]; delay (50); P2=Com[8];
P0=Seg[hour/ 10]; P2=Com[0]; delay (50); P2=Com[8];
}
/模式1 可加减分/
if(mode==1){
{ if(sign==1)
{ P0=Seg[second%10];P2=Com[7]; delay (50); P2=Com[8];
P0=Seg[second/10]; P2=Com[6]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[5]; delay (50); P2=Com[8];
P0=Seg[minute%10]; P2=Com[4]; delay (50); P2=Com[8];
P0=Seg[minute/10]; P2=Com[3]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[2]; delay (50); P2=Com[8];
P0=Seg[hour% 10]; P2=Com[1]; delay (50); P2=Com[8];
P0=Seg[hour/ 10]; P2=Com[0]; delay (50); P2=Com[8];
}
if(sign==0)
{ P0=Seg[second%10];P2=Com[7]; delay (50); P2=Com[8];
P0=Seg[second/10]; P2=Com[6]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[5]; delay (50); P2=Com[8];
P0=Seg[11]; P2=Com[4]; delay (50); P2=Com[8];
P0=Seg[11]; P2=Com[3]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[2]; delay (50); P2=Com[8];
P0=Seg[hour% 10]; P2=Com[1]; delay (50); P2=Com[8];
P0=Seg[hour/ 10]; P2=Com[0]; delay (50); P2=Com[8];
}
/模式2 可加减时/
if(mode==2){
{ if(sign==1)
{ P0=Seg[second%10];P2=Com[7]; delay (50); P2=Com[8];
P0=Seg[second/10]; P2=Com[6]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[5]; delay (50); P2=Com[8];
P0=Seg[minute%10]; P2=Com[4]; delay (50); P2=Com[8];
P0=Seg[minute/10]; P2=Com[3]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[2]; delay (50); P2=Com[8];
P0=Seg[hour% 10]; P2=Com[1]; delay (50); P2=Com[8];
P0=Seg[hour/ 10]; P2=Com[0]; delay (50); P2=Com[8];
}
if(sign==0)
{ P0=Seg[second%10];P2=Com[7]; delay (50); P2=Com[8];
P0=Seg[second/10]; P2=Com[6]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[5]; delay (50); P2=Com[8];
P0=Seg[minute%10]; P2=Com[4]; delay (50); P2=Com[8];
P0=Seg[minute/10]; P2=Com[3]; delay (50); P2=Com[8];
P0=Seg[10]; P2=Com[2]; delay (50); P2=Com[8];
P0=Seg[11]; P2=Com[1]; delay (50); P2=Com[8];
P0=Seg[11]; P2=Com[0]; delay (50); P2=Com[8];
}
}
}
/按键扫描/
void Keyget()
{/通过标志位来控制模式/
if(ms==0)
{ flag=1;}
if((ms)&&(flag))
{ flag=0;
mode++;
if(mode==3)
mode=0;
}
if(mode==1) //模式1
{/加按键/
if(ADD==0)
{ ADD_bit=1;}
if((ADD)&&(ADD_bit))
{ ADD_bit=0;
minute++;
if(minute==60)
minute=0;
}
/按减键/
if(EDC==0)
{ DEC_bit=1;}
if((DEC)&&(EDC_bit==1))
{ DEC_bit=0;
if(minute==0)
minute=59;
minute--;
}
}
if(mode==2) //模式2
{/加按键/
if(ADD==0)
{ ADD_bit=1;}
if((ADD)&&(ADD_bit))
{ ADD_bit=0;
hour++;
if(hour==24)
hour=0;
}
/按减键/
if(EDC==0)
{ DEC_bit=1;}
if((DEC)&&(EDC_bit==1))
{ DEC_bit=0;
if(hour==0)
hour=24;
hour--;
}
}
}
/初始化/
void time0()
{
TMOD=0x01;//设置定时器模式1
TH0=0xf8;//高八位赋初值
TL0=0xcb;//低八位赋初值
TR0=1;//启动定时器0计数
ET0=1;//使能定时器中断
EA=1;//使能总中断
}
/主函数/
void main()
{
time0();
while(1)
{
Keyget();
Segplay();
}
}
/中断/
void timer0()interrupt 1
{
TH0=0xf8;
TL0=0xcb;
counter++;
if(counter==500)
{
sign=1;
}
if(counter==440)
{
sign=0;
}
if(counter==500)
{
counter=0;
second++;
if(second==60)
{
second=0;
minute++;
} //秒进位
if(minute==60)
{
minute=0;
hour++;
} //分进位
if(hour==24)
{
hour=0;
}
}
}
有中文符号,P0 = Seg[second % 10];P2 = Com[7]; delay(50); P2 = Com[8];有这行的代码都有这个问题: