0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于定时器的八位数字显示器

CHANBAEK 来源:嵌入式开发教程 作者:郭学提 2023-07-12 11:51 次阅读

使用定时器中断动态显示8位数码管。基于定时器的八位数字显示器实验电路如图所示。

图片

分析: 要动态显示8位数码管,其数据的刷新频率应不低于50Hz(0.02S),也就是说每位数据的刷新时间应小于2.5ms(0.02S/8)。使用定时器T1以定时1ms,当定时器溢出中断时,刷新数据位。其程序在结构上可分为三大部分:主函数等、定时器中断服务函数、初始化函数。下面依次介绍各个部分。

1.主函数等

主函数前面这部分程序主要包括基本的IO口定义、全局变量定义、头文件包含、函数声明等。主函数首先调用初始化函数,对各个资源进行初始化操作,然后等待中断发生。

#define user_test//测试用
typedef unsigned char   uint8;
typedef unsigned short int  uint16;
uint8 LED_Code_buf[8];
uint8 Disply_temp;
sfr LED_Date=0xa0;//user P2
void main(void)
{
    Int_Initialize();
    Other_Initialize();
    while(1)
    {    
    }
}

2.定时器T1中断服务函数

定时器T1中断服务函数主要是刷新显示数据位,根据条件每次刷新一位数码管。

//8位数码管动态显示
void Timer1 (void) interrupt 3 using 1  
{
    //1ms 刷新1次
    TH1=(65536-1000)/256;
    TL1=(65536-1000)%256;
    switch(Disply_temp++)
    {
        case 0:
              LED_Date=LED_Code_buf[0];//显示高位
              break;
        case 1:
              LED_Date=LED_Code_buf[1];
              break;
         case 2:
              LED_Date=LED_Code_buf[2];
              break;
         case 3:
              LED_Date=LED_Code_buf[3];
              break;
         case 4:
              LED_Date=LED_Code_buf[4];
              break;
         case 5:LED_Date=LED_Code_buf[5];
              break;
         case 6:
              LED_Date=LED_Code_buf[6];
              break;
         case 7:
              LED_Date=LED_Code_buf[7];//显示低位
              break;
         default:
              Disply_temp=0;
              break;
    }
}

3.初始化函数

初始化函数包括中断初始化函数和其它资源的初始化函数。中断初始化函数配置了中断的触发方式,是否允许中断等操作。其它资源初始化函数主要配置开机显示的字符。

void Int_Initialize(void)
{  
    TMOD|=0x10;//T1计数模式,方式1 
    //1ms 刷新1次 12MHz晶振
    TH1=(65536-1000)/256;
    TL1=(65536-1000)%256;
    EA=1;
    ET1=1;
    TR1=1;
}
//其它初始化函数
void Other_Initialize(void)
{
    //显示87654321
    LED_Code_buf[0]=0x08;//最高位处理
    LED_Code_buf[1]=0x17;
    LED_Code_buf[2]=0x26;
    LED_Code_buf[3]=0x35;
    LED_Code_buf[4]=0x44;
    LED_Code_buf[5]=0x53;
    LED_Code_buf[6]=0x62;
    LED_Code_buf[7]=0x71;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 显示器
    +关注

    关注

    21

    文章

    4738

    浏览量

    137873
  • 数码管
    +关注

    关注

    31

    文章

    1827

    浏览量

    89950
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41027
  • 定时器
    +关注

    关注

    23

    文章

    3148

    浏览量

    112043
  • IO口
    +关注

    关注

    3

    文章

    164

    浏览量

    23757
收藏 人收藏

    评论

    相关推荐

    八位数码管循环滚动

    `八位数码管,循环显示字符串,高手绕道`
    发表于 01-19 16:32

    通过RS232发送两个八位数据?

    通过RS232发送两个八位数据,用Verilog实现?求程序~~
    发表于 12-31 22:20

    八位数码管显示的计算(可加减乘除)

    矩阵键盘4*4 ,八位数码管显示 搞了几天 虽然工程简单,但很开心啊{:12:}
    发表于 05-02 22:42

    求一个八位数码管显示的秒表

    求一个八位数码管显示的秒表,谢谢大神们!
    发表于 10-17 22:37

    51的AD和1602液晶的八位数据口全都接到P0口会有什么干扰吗?

    用ADc0804采集完数据传给51,然后将结果在1602上显示出来。现在我把AD和1602的八位数据口全都接到了P0口,请问会有什么干扰吗?不用锁存
    发表于 02-14 00:12

    DDR的同组第八位数据线能这样走吗?

    DDR的同组第八位数据线能这样走吗?不是同一层
    发表于 04-15 07:35

    八位数码管动态显示学号

    八位数码管动态显示学号,这个程序实现的效果是将程序下载到STC板子上后,可以看到8个数码管从左到右分别显示0到7的八个数字,隔一段时间后显示
    发表于 07-14 06:00

    51单片机的八位数码管的仿真

    51单片机八位数码管1到F动态滚动显示仿真及程序动态滚动显示仿真及程序#include#define uchar unsigned char#define uint unsigned
    发表于 11-18 08:52

    八位数码管的相关资料推荐

    我们在了解八位数码管的时候,提到了定时器的概念,因为后面很多情况都会涉及到,所以就来认真学习一下啦基本介绍MCS51系列的单片机通常有2个16可编程定时/计数
    发表于 12-01 08:16

    八位数码管动态扫描八位数码管+流水灯的相关资料分享

    八位数码管+流水灯八位数码管滚动显示可变亮度的数码管显示八位数码管动态扫描其实验现象为:从左到右8个数码管分别
    发表于 12-03 06:55

    如何去实现八位数码管的静态与动态显示代码呢

    八位数码管的原理是什么?如何去实现八位数码管的静态与动态显示代码呢?
    发表于 02-23 07:35

    如何去实现八位数码管的动态扫描呢

    八位数码管的原理是什么?如何去实现八位数码管的动态扫描呢?
    发表于 02-23 07:50

    如何利用单片机去实现C51计数和八位数码管显示设计呢

    如何利用单片机去实现C51计数和八位数码管显示设计呢?
    发表于 02-23 07:22

    CH583八位数据收发没问题的,超过八位就丢了怎么解决?

    八位数据收发没问题的,超过八位就丢了
    发表于 09-20 07:14

    八位数字密码锁资料

    八位数字密码锁资料,很好设计资料,快来学习吧。
    发表于 05-09 17:10 0次下载