#include
#define uchar unsigned char
#define uint unsigned int
sbit com1=P3^7; //位定义共阴极接口
sbit com2=P3^6;
sbit com3=P3^5;
sbit com4=P3^4;
sbit luck1=P2^0; //位定义 按键接口
sbit luck2=P2^1;
sbit luck3=P2^2;
sbit luck4=P2^3;
void delay(uint z);
void luck();
uchar num,num1,shi,ge;
uint n,h,k;
uchar code table[]=
{
0xD7,0x14,0xCD,0x5D, // 0 1 2 3
0x1E,0x5B,0xDB,0x15, // 4 5 6 7
0xDF,0x5F}; // 8 9 自己编写的 数码管段选显示数字
void delay(uint z)
{
uint i,j; //延时 z ms
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar shi,uchar ge) //显示子函数
{
com3=0;
P0=table[shi]; //定义十位
delay(5); //延时 5 ms
com4=0;
P0=table[ge]; //定义个位
delay(5); //延时 5 ms
}
void main () //主函数
{
num=0;
num1=0;
luck1=1;
luck2=1;
luck3=1;
luck4=1;
TMOD=0x01; //设置定时器0为工作方式1
TH0=(65536-45872)/256; //赋初值
TL0=(65536-45872)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1;
while(1)
{
display(shi,ge);
if(luck1==0||luck2==0||luck3==0||luck4==0)
{
luck();
}
}
}
void T0_time() interrupt 1 //中断函数 不需要声明
{
TH0=(65536-45872)/256; //重新装值 50ms
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0; //把num1清零 再算一次
num++;
if(num==100)
{
num=0;
}
shi=num/10; //把一个2位数分离后分别送数码管显示 十位和各位
ge=num%10;
}
}
void luck()
{
if(luck1==0)
{
delay(10);
if(luck1==0)
{
TR0=~TR0; // 有改动
}
}
if(luck2==0)
{
delay(10);
if(luck2==0)
{
TR0=TR0; // 有改动
}
}
if(luck3==0)
{
delay(10);
if(luck3==0)
{
num=0;
while(1);
while(!luck3); // 有改动
}
}
if(luck4==0)
{
delay(10);
if(luck4==0)
{
TH0=(65536-45872)/256; //重新装值 50ms
TL0=(65536-45872)%256;
num++;
while(!luck4); // 有改动
}
}
}
可能有点问题 我自己写的 还请多多指教