📄 秒表c51程序.txt
字号:
秒表C51程序
//秒表C51程序
#include <stdio.h>
#include <REGX52.H>
//#include <AT89X51.H>
void initial(void);
//初始化子程序
void delay(short i);
//延时子程序
void display(unsigned char i,unsigned char num);
//显示子程序,其中变量i,num含义为在第i个数码管显示数
void xianshi(void);//时钟显示
unsigned char keyscan(void);
//键盘扫描子程序
void updatee(void);
unsigned char m1=0;
unsigned char m0=0;
unsigned char s1=0;
unsigned char s0=0;
unsigned char s01=0;
unsigned char s00=0;
int LEDData [] = {0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60};
void main(void)
{
unsigned char status;
unsigned char keyword;
initial();
//键盘驱动信号,发光二极管,以及蜂鸣器都设在无效状态
for(;;)
{
switch(status)
{
case 0:
xianshi();
keyword=keyscan();
if(keyword==16)
{
delay(100);//精确定时一秒,时钟走的信号
updatee();
}
else
if(keyword==11)status=1; //0状态为计时状态,1状态为停止状态
else
{
delay(3);
//输入有错,蜂鸣器响
}
break;
case 1:
xianshi();
keyword=keyscan();
if(keyword==10)status=0; //开始计时,转到0状态;
else if(keyword==12)status=2;//2状态为设置初值状态;
else if(keyword==13)
{
s0=0;
s1=0;
m0=0;
m1=0;
s01=0;
s00=0;
P2=0;
P0=0x28;
}//清零
else
{
delay(3); //输入有错,蜂鸣器?
}
break;
}
}
}
void initial(void)
{
P1_4=1;
P1_5=1;
P1_6=1;
P1_7=1; //键盘驱动信号都设为低,避免干扰。
}
void delay(short i)
{
int j=0;
int k=0;
k=i*1;
while(j<k)
j++;
}
void display(unsigned char i,unsigned char num)
{
if(num >= 0 && num <=9)
{
switch(i)
{
case 0:P2=0X7c;P0=LEDData[num];
break;
case 1:P2=0x7a;P0=LEDData[num];
break;
case 2:P2=0x76;P0=LEDData[num];
break;
case 3:P2=0x6f;P0=LEDData[num];
break;
case 4:P2=0x5f;P0=LEDData[num];
break;
case 5:P2=0x3f;P0=LEDData[num];
break;
default:
break;
}
}
}
unsigned char keyscan(void)//键盘扫描
{
P1_7=0;
P1_6=1;
P1_5=1;
P1_4=1;
if(P1_0==0)
delay (13);
if(P1_0==0)
{delay (13);
if(P1_0==0)
return 0;}
if(P1_1==0)
delay (13);
if(P1_1==0)
{delay (13);
if(P1_1==0)
return 1;}
if(P1_2==0)
delay (13);
if(P1_2==0)
{delay (13);
if(P1_2==0)
return 2;}
if(P1_3==0)
delay (13);
if(P1_3==0)
{delay (13);
if(P1_3==0)
return 3;}
delay (13);
P1_7=1;
P1_6=0;
P1_5=1;
P1_4=1;
if(P1_0==0)
delay (13);
if(P1_0==0)
{delay (13);
if(P1_0==0)
return 4;}
if(P1_1==0)
delay (13);
if(P1_1==0)
{ delay (13);
if(P1_1==0)
return 5;}
if(P1_2==0)
delay (13);
if(P1_2==0)
{ delay (3);
if(P1_2==0)
return 6;}
if(P1_3==0)
delay (13);
if(P1_3==0)
{delay (3);
if(P1_3==0)
return 7;}
delay (13);
P1_7=1;
P1_6=1;
P1_5=0;
P1_4=1;
if(P1_0==0)
delay (13);
if(P1_0==0)
{ delay (13);
if(P1_0==0)
return 8;}
if(P1_1==0)
delay (13);
if(P1_1==0)
{delay (13);
if(P1_1==0)
return 9; }
if(P1_2==0)
delay (13);
if(P1_2==0)
{delay (13);
if(P1_2==0)
return 10;}
if(P1_3==0)
delay (13);
if(P1_3==0)
{delay (13);
if(P1_3==0)
return 11;}
delay (13);
P1_7=1;
P1_6=1;
P1_5=1;
P1_4=0;
if(P1_0==0)
delay (13);
if(P1_0==0)
{delay (13);
if(P1_0==0)
return 12;}
if(P1_1==0)
delay (13);
if(P1_1==0)
{delay (13);
if(P1_1==0)
return 13;}
if(P1_2==0)
delay (13);
if(P1_2==0)
{ delay (13);
if(P1_2==0)
return 14;}
if(P1_3==0)
delay (13);
if(P1_3==0)
{delay (13);
if(P1_3==0)
return 15;}
P1_4=1;
delay (13);
return 16;
}
void updatee()
{
if(s00==9) //如果10ms位需要进位,则进入语句
{
s00=0;
if(s01==9) //如果100ms位需要进位,则进入语句
{
s01=0;
if(s0==9) //如果1sec位需要进位,则进入语句
{
s0=0;
if(s1==5) //如果10sec位需要进位,则进入语句
{
s1=0;
if(m0==9)
{m0=0;
if(m1==5)m1=0;
else m1+=1;
}
else m0+=1;
}
else s1+=1;
}
else s0+=1;
}
else s01+=1;
}
else s00+=1;
xianshi();
}
void xianshi(void)
{
display(0,m1);
delay(30);
display(1,m0);
delay(30);
display(2,s1);
delay(30);
display(3,s0);
delay(30);
display(4,s01);
delay(30);
display(5,s00);
delay(30); //以上语句则在数码管上显示各个数字
}
----------------------------------------------
大家好,我是西安的一名电子专业的研究生,希望跟大家多多交流
我的主页:http://www.huoniu.ku.net
我的QQ:41877690
nyptg@163.com
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -