此程序模拟普通的电子表的功能,实现了时,分,秒的显示,并有调表功能。程序简单,好多地方并没有注意细节,只是实现了部分功能。
//数码管为8位七段共阳数码管,数据端接在p0口,选择端接p2口
//外部中断0,选择调时,分或秒,并闪烁,外部中断1,闪烁位加1,实现调表
//注:些程序只是模拟,并无精确校准
#include
unsigned char led7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0x0c6,0xa1,0x86,0x8e,
0xbf, //‘-’
}; //七段共阳数码管的编码0-f
unsigned char led7addr[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //数码管的地址
unsigned char flag=0;
unsigned char loop=0;
unsigned char second=0;
unsigned char minute=0;
unsigned char hour=0;
void delay(unsigned int n) //n=10000,延时90.05毫秒
{
while(n--);
}
void display(unsigned char addr,unsigned char ledcode) //通用显示函数
{
p2=led7addr[addr]; //p2送数码管的地址
p0=led7code[ledcode]; //p0送要显示的数据
delay(500); //延时
}
void int_ex0() interrupt 0
{
delay(2000);
if (!p3_2)
{
if(flag++》=3) flag=0;
}
}
void int_ex1() interrupt 2
{
delay(2000);
if (!p3_3)
{
if(flag==1) second++;
if(flag==2) minute++;
if(flag==3) hour++;
}
}
void int_t0() interrupt 1 //定时器0
{
tl0=0xb0; //装入初值,15536,定时50000us
th0=0x3c;
loop++;
}
void main()
{
tmod=0x01; //定时器0,工作方式2,16位定时器
tl0=0xb0; //装入初值,15536,定时50000us
th0=0x3c;
et0=1;
tr0=1;
ex0=1;
ex1=1;
it0=1; //跳变方式
it1=1;
ea=1;
while (1)
{
if(loop》=20)
{
second++;
loop=0;
}
if (second》=60)
{
second=0;
minute++;
}
if (minute==60)
{
minute=0;
hour++;
}
if (!(flag==3&&loop《10))
{
display(0,hour/10);
display(1,hour%10);
}
display(2,16);
if (!(flag==2&&loop《10))
{
display(3,minute/10);
display(4,minute%10);
}
display(5,16);
if (!(flag==1&&loop《10))
{
display(6,second/10);
display(7,second%10);
}
}
}
区块链在各行业的潜力有多大
科大讯飞刘庆峰:要探索在人工智能科技前沿‘无人区’
5G实现业务突破的四大能力及挑战
信号量和互斥锁的区别
rfid技术介绍,rfid在汽车制造上的作用
51单片机模拟实现普通电子表功能的设计
华为HAE AI杰出开发者颁奖仪式举行
伺服压力机的主要特点以及应用领域的介绍
模拟开关基础及选型知识汇总
桥式电路如何实现马达正反转
WTV380语音芯片:节省产品开发时间并降低BOM成本的优秀解决方案
一文看懂OPPO Reno5系列
CANopen总线分析软件推荐
德国罗德与施瓦茨FSH3手持式频谱分析仪
亚马逊宣布将将智能语音助手Alexa的工作转移到内部芯片上
充电器发烫,下面可以垫冰块吗
谷歌多款iOS应用仍未上线隐私标签
Linux中grep命令的12个实际例子
Intersil推出用于智能手机的集成显示电源和LED驱动器单芯片方案
PPTV手机PPKing7s评测 打破时间和地点的限制