前言:
✌ 作者简介:CC++Edge淇,大家可以叫我--斯淇。(CSDN优质博主建议加这一条!)
📑 个人主页:CC++Edge淇主页
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥 如果感觉博主的文章还不错的话,还请不吝👍关注、点赞、收藏三连支持👍一下博主哦
💬 人生格言:这世界形形色色,做好自己才是真!-——从入门到现在不容易~💬
每日推荐歌曲:如愿.
————————————————
目录
扩展实验1:
任务说明:视觉上8个LED数码管同时显示“17-32-55“,从00-00-00,每秒钟加1次数!
动态数码管(普中开发板图)!!
74HC138译码器!
定时器显示建议使用:(烧录软件中的定时计时为(60))
最终效果:(会有一定的偏差可能是程序不完善)
代码分享(建议使用模块化编程):
#include <REGX52.H>
#include <intrins.h>
#include "delay.h"
#include "intrrupt.h"
typedef unsigned char time;
time code date[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D, 0x7D,0x07,0x7F,0x6F};
time hour=0,minute=0,second=0;//¶¨Òåʱ·ÖÃë³õʼ»¯ÊýÖµ£¡
time count=0;
/*2022.6.11ÈÕ´´½¨£ºÁõ˹俣»ÊýÂë¹ÜÏÔʾʱ·ÖÃ룡*/
void display(time hour,time minute,time second){
int i;
for(i=1;i<=8;i++){
switch(i){
case 1: P2_4=0;P2_3=0;P2_2=0;P0=date[second%10];break;
case 2: P2_4=0;P2_3=0;P2_2=1;P0=date[second/10];break;
case 3: P2_4=0;P2_3=1;P2_2=0;P0=0x40;break; //ѡλ1000ÔòÏÔʾ
case 4: P2_4=0;P2_3=1;P2_2=1;P0=date[minute%10];break;
case 5: P2_4=1;P2_3=0;P2_2=0;P0=date[minute/10];break;
case 6: P2_4=1;P2_3=0;P2_2=1;P0=0x40;break;//ѡλ1000ÔòÏÔʾ
case 7: P2_4=1;P2_3=1;P2_2=0;P0=date[hour%10];break;
case 8: P2_4=1;P2_3=1;P2_2=1;P0=date[hour/10];break;
}
Delay(1);//ÏûÓ°
P0=0;
}
}
void interrupttimmes()interrupt 1 //¶¨Ê±ÖжÏÆ÷£¡
{
TL0 = 0xB0;
TH0 = 0x3C;
count++;
if(count==18){
count=0;
second++;
if(second==60){
second=0;
minute++;
if(minute==60){
minute=0;
hour++;
if(hour==24)
hour=0;
}
}
}
}
void main(){
Timer0Init();
while(1){
display(hour,minute,second);
}
}
延迟函数模块化!
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
定时中断器模块化!
#include <REGX52.H>
void Timer0Init() //³õʼ»¯ÖжÏÆ÷(¿ÉÒÔÔÚÖÐÉÕ¼Èí¼þÖÐÌáÈ¡£©
{
TMOD &= 0xF0;
TMOD |= 0x01;
TL0 = 0xB0;
TH0 = 0x3C;
TF0 = 0;
TR0 = 1;
ET0=1;
EA=1;
}
代码注释格式可能有冲突(导致乱码)
视频效果:
计时器