单片机秒表程序
#include<reg52.h>
sbitSPK=P1^2;
sbitLATCH1=P2^6;// 段锁存
sbitLATCH2=P2^7;// 位锁存
sbitkey1=P3^5;
sbitkey2=P3^4;
sbitkey3=P3^3;
sbitkey4=P3^2;
unsignedchar aa;bb; unsigned int t;num;
unsignedchar code
DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码值0~9
unsignedchar code WeiMa[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; unsignedchar TempData[8]; //存储显示值的全局变量voidDelay(t); //函数声明
voidDisplay(unsigned char FirstBit,unsigned char Num);
voidTimer0(void)
{
TMOD=0x01; //使用模式1,16位定时器
TH0=(65536-
50000)/256;//给定初值,这里使用定时器最大值从0开始计数一直到65535溢
出
TL0=(65536-50000)%256;
EA=1;//总中断打开
ET0=1;//定时器中断打开
}
voidKEY()
{
aa++;
if(aa==20)
{
aa=0;
num++;
if(num==1000)
num=0;
}
TempData[0]=DuanMa[(num%100)%10];
TempData[1]=DuanMa[(num%100)/10];
TempData[2]=DuanMa[num/100];
Display(0,3);
}
voidmain()
{
P3=0xff;
LATCH2=1;
P0=0xc0;
LATCH2=0;//初始化数码管
LATCH1=1;
P0=DuanMa[0];
LATCH1=0;
while(1)
{
if(key2==0)
{
Delay(10);
if(key2==0)
while(!key2);
num=0;
TempData[0]=DuanMa[(num%100)%10];
TempData[1]=DuanMa[(num%100)/10];
TempData[2]=DuanMa[num/100];
Display(0,3);
}
if(key1==0)
{
Delay(10);
if(key1==0)
while(!key1);
bb++;
if(bb>=2) bb=0; //键盘检测
}
if(bb==1)
{
TR0=1;
KEY();
}
if(bb==0)
{
TR0=0;
TempData[0]=DuanMa[(num%100)%10];
TempData[1]=DuanMa[(num%100)/10];
TempData[2]=DuanMa[num/100];
Display(0,3);
if(key3==0)
{
Delay(10);
if(key3==0)
while(!key3);
num++;//key1按一下,key3按一下加1;
TempData[0]=DuanMa[(num%100)%10];
TempData[1]=DuanMa[(num%100)/10];
TempData[2]=DuanMa[num/100];//加一后的数分解显示到数码管;
}
if(key4==0)
{
Delay(10);
if(key4==0)
while(!key4);
num--;//key1按下,key4按一下减1;
TempData[0]=DuanMa[(num%100)%10];
TempData[1]=DuanMa[(num%100)/10];
TempData[2]=DuanMa[num/100];//减一后的数分解显示到数码管
}
}
}
}
voidDelay( t)
{
while(--t);//延时子函数
}
voidDisplay(unsigned char FirstBit,unsigned char
Num)//显示函数,用于动态扫描数码
管,FirstBit表示需要显示的第一位,
{
unsignedchar i;
for(i=0;i<Num;i++)
{
P0=0;//清空数据,防止有交替重影
LATCH1=1;//段锁存
LATCH1=0;
P0=WeiMa[i+FirstBit];//取位码
LATCH2=1;
LATCH2=0;
P0=TempData[i];//取显示数据,段码
LATCH1=1;
LATCH1=0;
Delay(200);// 动态扫描时间
}
}
Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务