标题:
单片机数码管99秒秒表源代码
[打印本页]
作者:
wangboyun
时间:
2017-10-16 21:53
标题:
单片机数码管99秒秒表源代码
/********************************************************************************
*程序名: 数码管99秒秒表 *
*编写人: 马飞龙 *
*编写时间: 1.24 *
*硬件支持: stc89c52 11.0592MHz *
*接口说明: P0口接数码管段选,P2.0个位 P2.1十位 *
*修改日志: *
1)修改通电后不操作就开始计时的错误; *
2)给数码管显示加消影; *
********************************************************************************/
#include <reg52.h>
#define uchar unsigned char //宏定义 用uchar代替 unsigned char
#define uint unsigned int
/*引脚定义*/
sbit START=P1^2; //开始、停止键 低电平有效
sbit RST=P1^3; //复位键
/*定义全局变量*/
uint time; //时间变量
/*数码管字模,对应 0-9*/
uchar code table[]={ // code 放在ROM
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
/*延时函数*/
void Delay(uint ms) //毫秒级延时函数
{
uint i, j;
for(i =ms; i>0; i--)
for(j =110; j>0; j--);
}
/*中断*/
void time0() interrupt 1
{
uchar tt;
TH0 = 0x4c; //晶振11.0592Mhz
TL0 = 0x00; //若用12Mhz晶振 则改为 TH0=0x3c;TL0=0xb0;
tt++;
if(tt == 20)
{
time++;
if(time==99) //到99后在从00开始
time = 0;
tt = 0;
}
}
/*显示函数*/
void Display(uchar sum)
{
uchar shi, ge;
P0 = 0x00; //消影
P2 = 0x00;
shi = table[sum/10];
P0 = shi;
P2 = 0xfd;
Delay(5);
P0 = 0x00; //消影
P2 = 0x00;
ge = table[sum%10];
P0 = ge;
P2 = 0xfe;
Delay(5);
}
/*按键扫描*/
void keyscan()
{
if(START==0) //开始、停止
{
Delay(10); //消抖
if(START==0)
{
TR0 =!TR0;
while(!START) Display(time);
}
}
if(RST==0) //复位
{
Delay(10); //消抖
if(RST==0)
{
time=0;
TR0=0;
while(!RST)Display(time);
}
}
}
//主函数
void main()
{
EA = 1; //中断开关
ET0 = 1;
TMOD = 0x01;
TH0 = 0x4c; //晶振11.0592Mhz
TL0 = 0x00; //若用12Mhz晶振 则改为 TH0=0x3c;Tl0=0xb0;
TR0 = 0;
while(1)
{
keyscan();
Display(time);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1