📄 ex5_6.c
字号:
//程序:ex5_6.c
//功能:00~59简易秒表程序
#include <reg51.h>
unsigned char msec,sec; //定义msec为50ms计数变量,sec为秒变量
void delay(unsigned char i); //延时函数参见任务1程序ex1_1.c
//函数名:T0_INT
//函数功能:定时器0中断函数,定时50ms到,自动执行该函数,判断是否中断20次
//形式参数:无
//返回值:无
void T0_INT(void) interrupt 1 //定时器0中断类型号为1
{
TH0=0x3c; //50ms定时初值
TL0=0xb0;
msec++; //中断次数增1
if(msec==20) //中断次数到20次吗?
{
msec=0; //是,1秒计时到,50ms计数单元清零
sec++; //秒单元加1
if(sec==60) //到60秒吗?
{
sec=0; //是,秒单元清零
}
}
}
void main() //主函数
{
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定义数字0~9字型显示码
unsigned char temp;
TMOD=0x01; //定时器0工作方式1
TH0=0x3c; //50ms定时初值
TL0=0xb0;
EA=1; //开总中断
ET0=1; //开定时器0中断
P3=0xff; //P3口做输入
while(1) {
P2=0x01; //选中P2.0控制的数码管
P1=led[sec%10]; //显示秒个位
delay(10);
P2=0x02; //选中P2.1控制的数码管
P1=led[sec/10]; //显示秒十位
delay(10);
temp=~P3; //读入P3口引脚状态并取反
temp=temp&0x2c; //屏蔽掉无关位,保留三位按键状态00x0xx00
if(temp==0) //判断有无按键按下
{
if(temp==0x04) //按下停止键
TR0=0; //停止计数
if(temp==0x08) //按下启动键
TR0=1; //启动计数
if(temp==0x20) //按下复位键
{ TR0=0;sec=0;msec=0; }
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -