#include <reg51.h>
#include <intrins.h>
unsigned char table[10]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
unsigned char disbuf[4];
unsigned char zcount=0,xiaocount=0,dacount=0;
void delay(unsigned int ms);
void xianshi(void);
//延时子程序
void delay(unsigned int ms)
{
unsigned char k;
while(ms--)
{
for(k = 0; k < 125; k++);
}
}
//四位数码管显示子程序
void xianshi(void)
{
unsigned char i;
for(i=0;i<=3;i++)
{if(i==0) //显示第一位数码管
{P2=0xef;
P0=table[disbuf[i]];
delay(1);
}
else if(i==1) //显示第二位
{P2=0xdf;
P0=table[disbuf[i]];
delay(1);
}
else if(i==2) //显示第三位
{P2=0xbf;
P0=table[disbuf[i]];
delay(1);
}
else {P2=0x7f; //显示第四位
P0=table[disbuf[i]];
delay(1);
}
}
}
//主程序
void main(void)
{
P0=0xff;
P2=0xff;
P3=0xff;
TMOD=0x01; //定时器工作于方式1
IE=0x87; //允许定时器0和外部0、1的中断
IP=0x05; //设置外部0、1为高优先级
TH0=0xbe;
TL0=0xe2; //设置定时器0的初值,定时1/60ms
IT0=1;
IT1=1; //设置外部中断0、1为下降沿触发
while(1)
xianshi();
}
//外部中断0程序
void int0(void) interrupt 0
{
EX0=0;
delay(10); //延时10ms进入低电平区域
zcount++;
if((zcount%2)!=0)
TR0=1;
else
TR0=0;
if(P3^2==0)
xianshi(); //在低电平区域动态扫描显示
else delay(10); //出现高跳变之后,延时10ms进入高电平区域
EX0=1;
}
//定时器0中断程序
void timer0(void) interrupt 1
{
TH0=0xbe;
TL0=0xe2;
xiaocount++;
if(xiaocount>60)
{xiaocount=0;
dacount++;
}
if(dacount>60)
dacount=0;
disbuf[0]=xiaocount%10;
disbuf[1]=xiaocount/10;
disbuf[2]=dacount%10;
disbuf[3]=dacount/10;
}
//外部中断1程序
void int1(void) interrupt 2
{
EX1=0;
TR0=0;
zcount++;
disbuf[0]=0x00;
disbuf[1]=0x00;
disbuf[2]=0x00;
disbuf[3]=0x00;
xiaocount=0;
dacount=0;
EX1=1;
}
miaobiao.rar_四位秒表
版权申诉
186 浏览量
2022-09-21
07:35:05
上传
评论
收藏 962B RAR 举报
四散
- 粉丝: 52
- 资源: 1万+
最新资源
- 基于matlab实现 powell算法 用matlab实现,使用方法内附详细说明.rar
- 基于matlab的手写字体识别程序,并对结果进行保存.rar
- 基于c语言指纹识别demo代码 包括了指纹图像方向图计算、频率计算、gabor滤波器增强,细化,特征点提取,特征点匹配.rar
- 基于c++NSGA-2思想的多目标优化程序,采用进化算法处理多目标实值优化问题.rar
- Linux系统中常用权限管理命令
- Coello Coello等人提出了MOPSO 该程序基于matlab实现针对测试函数matlab程序
- Linux系统中常用权限管理命令
- AIR-AP1815-K9-ME-8-5-182-0.tar For Cisco AP1815
- 实验七.zip
- ESP8266刷固件软件flash-download-tools-v3.6.5,AT固件,机智云固件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0