#include
sbit key1 = P3^4;
sbit key2 = P3^5;
sbit key3 = P3^6;
sbit key4 = P3^7;
sbit du = P2^6;
sbit we = P2^7;
sbit LED1 = P1^0;
unsigned char code leddata[]=
{
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄灭
0x00 //自定义
};
void delay(unsigned int);
unsigned char num,num1;
void display(unsigned char num)
{
unsigned char shi,ge;
shi=num/10;
ge=num%10;
du = 1;
P0=leddata[shi];
du = 0;
P0=0xff;
we = 1;
P0=0xfe;
we = 0;
delay(1);
du = 1;
P0=leddata[ge];
du = 0;
P0=0xff;
we = 1;
P0=0xfd;
we = 0;
delay(1);
}
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init() //初始化函数
{
TMOD = 0x01;
TH0 =(65536-45872)/256;
TL0 =(65536-45872)%256;
EA=1; //开总中断
ET0=1;//开定时器0中断
}
void keyscan()
{
if (key1==0)
{
delay(10);
if(key1 == 0)
{
num++;
if(num==60)
num=0;
while(!key1);//等待按键释放
}
}
if (key2 == 0)
{
delay(10);
if(key2==0)
{
if(num==0)
num=60;
num--;
while(!key2);
}
}
if(key3 == 0)
{
delay(10);
if(key3 == 0)
{
num=0;
while(!key3);
}
}
if(key4 == 0)
{
delay(10);
if(key4==0)
{
while(!key4)
TR0=~TR0;//启动定时器
}
}
}
void main()
{
init();//初始化函数
while(1)
{
keyscan();
display(num);
}
}
void T0_time() interrupt 1
{
TH0=(65526-45872)/256;
TL0=(65526-45872)%256;
num1++;
if(num1==20)
{
num1++;
num++;
if(num==60)
num=0;
}
}
万分感谢
以前课设做过,截取声明部分和显示部分给你参考一下,后面程序不全,直接用会报错
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar data se7[4];
uchar data sec_dx=20; //东西数默认
uchar data sec_nb=20; //南北默认值
uchar data set_timedx=20;
uchar data set_timenb=20;
int n,m,i;
uchar data b; //定时器中断次数
sbit Yellow_nb=P1^2; //南北黄灯标志
sbit Yellow_dx=P1^5; //东西黄灯标志
sbit Green_nb=P1^1;
sbit Green_dx=P1^4;
sbit Red_nb=P1^3;
sbit Red_dx=P1^6;
//按键标志
sbit ENTER=P2^2;
sbit AddOne_nb=P2^1;
sbit AddOne_dx=P2^0;
sbit STOP=P2^3;
sbit CAUTION=P3^0;
sbit Change=P3^1;
// sbit Urgent=P2^3;
bit T=0; //灯状态循环标志
uchar code table[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
//函数的声明部分
void delay(int ms); //延时子程序
void display(); //显示子程序
void time1(void);
void key();
void TimeSet();
//主程序
void main()
{
TMOD=0X01;
TH0=0XD8;
TL0=0XF0;
EA=1;
ET0=1;
TR0=1;
// EX0=1;
EX1=1;
P1=0XC3; // 开始默认状态,东西红灯,南北绿灯
sec_nb=sec_dx+5;
while(1)
{
key();
display(); //调用显示程序
}
}
void display() //显示子程序
{
se7[1]=sec_dx/10; //第1位 东西秒十位
se7[2]=sec_dx%10; //第2位 东西秒个位
se7[3]=sec_nb/10; //第3位 南北秒十位
se7[0]=sec_nb%10; //第4位 南北秒个位
P2=0xff; // 初始灯为灭的
P0=0x00;
P2=0xeF; //片选LCD1
P0=table[se7[1]];
delay(1);
P2=0xff;
P0=0x00;
P2=0xdF; //片选LCD2
P0=table[se7[2]];
delay(1);
P2=0xff;
P0=0x00;
P2=0XbF; //片选LCD3
P0=table[se7[3]];
delay(1);
P2=0xff;
P0=0x00;
P2=0X7F;
P0=table[se7[0]]; //片选LCD4
delay(1);
}
很多东西都忘记了,你凑合着看
void T0_time() interrupt 1
{
TH0=(65526-45872)/256;
TL0=(65526-45872)%256;
num1++;
if(num1==20)
{
num1++;
num++;
if(num==60)
num=0;
}
}这个num1为什么要一直自加??