单片机数码管的静态显示

发布者:诚信与爱最新更新时间:2016-12-23 来源: eefocus关键字:单片机  数码管  静态显示 手机看文章 扫描二维码
随时随地手机看文章

在第三章我们学习了 74HC138,了解到 74HC138 在同一时刻只能让一个输出口为低电平,也就是说在一个时刻内,我们只能使能一个数码管,并根据我们给出的 P0 的值来改变这个数码管的显示字符,我们可以将此理解为数码管的静态显示。


数码管静态显示是对应动态显示而言的,静态显示对于一两个数码管还行,多个数码管,静态显示实现的意义就没有了。这节课我们先用一个数码管的静态显示来实现一个简单的秒表,为下节课的动态显示打下基础。


先来介绍一个 51 单片机的关键字 code。我们前边课程定义变量的时候,一般用到unsigned char 或者 unsigned int 这两个关键字,这样定义的变量都是放在我们的单片机的 RAM中,我们在程序中可以随意去改变这些变量的值。但是还有一种数据,我们在程序中要使用,但是却不会改变它的值,定义这种数据时可以加一个 code 关键字修饰一下,这个数据就会存储到我们的程序空间 Flash 中,这样可以大大节省单片机的 RAM 的使用量,毕竟我们的单片机 RAM 空间比较小,而程序空间则大的多。那么现在要使用的数码管真值表,我们只会使用它们的值,而不需要改变它们,就可以用 code 关键字把它放入 Flash 中了,具体程序代码如下。

纯文本复制

#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

//用数组来存储数码管的真值表,数组将在下一章详细介绍

unsigned char code LedChar[] = {

    0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,

    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E

};

void main(){

    unsigned char cnt = 0;  //记录 T0 中断次数

    unsigned char sec = 0;  //记录经过的秒数

   

    ENLED = 0;  //使能 U3,选择数码管 DS1

    ADDR3 = 1;

    ADDR2 = 0;

    ADDR1 = 0;

    ADDR0 = 0;

    TMOD = 0x01;  //设置 T0 为模式 1

    TH0 = 0xB8;  //为 T0 赋初值 0xB800

    TL0 = 0x00;

    TR0 = 1;  //启动 T0

    while (1){

        if (TF0 == 1){  //判断 T0 是否溢出

            TF0 = 0;  //T0 溢出后,清零中断标志

            TH0 = 0xB8;  //并重新赋初值

           

            TL0 = 0x00;

            cnt++;  //计数值自加 1

            if (cnt >= 50){  //判断 T0 溢出是否达到 50 次

                cnt = 0;  //达到 50 次后计数值清零

                P0 = LedChar[sec]; //当前秒数对应的真值表中的值送到 P0 口

                sec++;  //秒数记录自加 1

                if (sec >= 16){  //当秒数超过 0x0F(15)后,重新从 0 开始

                   sec = 0;

                }

            }

        }

    }

}


关键字:单片机  数码管  静态显示 引用地址:单片机数码管的静态显示

上一篇:单片机数码管的真值表
下一篇:C语言变量的存储类别

推荐阅读最新更新时间:2024-03-16 15:26

单片机中关键字data,idata,xdata,pdata的区别
data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。 idata: 固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式 访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好) xdata: 外 部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。 pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用。
[单片机]
基于单片机的人体阻抗测量系统
  引 言   医学 阻抗 测量是利用生物组织与器官的电特性及其变化,提取与生物体生理、病理状况相关的生物医学信息的一种检测技术。它通常借助于驱动电极向检测对象送入一微小的交变电流(或电压)信号,同时测量两极的电压(或电流)信号,从而计算出相应阻抗,然后应用于不同目的。   本设计利用MSP430F149自带的串口通过RS485进行远距离实时传输,上位机可将实时数据进行曲线绘制、数据保存等处理。   1 系统结构   系统采用TI公司的MSP430F149单片机。该单片机有60 KB Flash、2 KB RAM,具有强大的数据处理能力。单片机通过向AD9852发送频率字、幅度字从而控制正弦波的频率、幅度。正弦波经过电流转
[单片机]
基于<font color='red'>单片机</font>的人体阻抗测量系统
PIC12C5××单片机的编程器
  1.P IC 12C5××编程器      为了学会PIC12C5××芯片的多次再写,现给出一种PIC12C5××的简易编程器 电路 ,如下图所示。该编程器成本低、制作容易,只要装配无误,即可将PIC12C5××芯片进行编程。当然编程之前,应当把PIC12C5××芯片的源程序在MPLAB集成开发软件下进行汇编而生成对应的目标码.hex,即可直接用图1的编程器与PC配合烧写芯片,然后用相应的实验板演示其实验。 iframe id="iframeu2163852_0" src="http://pos.baidu.com/hcsm?rdid=2163852&dc=3&di=u2163852&dri=0&dis=0&dai=2
[单片机]
PIC12C5××<font color='red'>单片机</font>的编程器
单片机74LS138应用
硬件连接: 程序: #include reg52.h #define uint unsigned int #define uchar unsigned char void Delay(uint x) { uchar i; while(x--) { for(i=0;i 120;i++); } } void main() { P2 = 0x00; while(1) { P2 = (P2+1)%8; Delay(50); } }
[单片机]
<font color='red'>单片机</font>74LS138应用
51单片机与RC500射频
#include reg52.h #include RC500.h #include string.h #include stdio.h #include absacc.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define GetRegPage(addr) (0x80 | (addr 3)) idata struct TranSciveBuffer{uchar MfCommand; uchar MfLength;
[单片机]
深耕8位MCU,瑞萨电子凭借RL78助力工业与物联网市场
从我们驾驶的汽车到家中的电器,再到保护家庭安全的烟雾报警器,微控制器 (MCU) 几乎无处不在。瑞萨电子是全球最大的 MCU 供应商,虽然与微处理器相比,MCU 受到的关注较少,但瑞萨正在通过创新来帮助推动汽车和物联网不断实现数字化。 瑞萨从事 MCU 业务已有十多年,起初源于 2010 年 NEC 电子和瑞萨科技的合并,瑞萨科技本身又是 2003 年由日立和三菱合并而来。其总部位于日本,制造设施位于日本 、中国、东南亚和美国,瑞萨电子是全球排名第一的汽车MCU供应商。 我之前写过关于瑞萨的财务增长和公司文化,以及物联网和基础设施业务部门 (IIBU)的有关文章。现在,我想将注意力转向瑞萨电子的主要 MCU,特别是其 R7
[单片机]
PIC18单片机的CANopen通信协议
引 言 CAN总线由于具有实时性和可靠性高、组网成本低等优点,近年来在汽车工业、楼宇自动化、工厂自动化、机器人控制等领域得到广泛应用。CANopen协议不仅定义了通信规范,而且为可编程系统、不同器件、接口等设备应用子协议定义了大量的行规。遵循CANopen协议开发出的设备能实现不同生产厂家的产品间的互操作。 要掌握CANopen协议,重点是对对象字典和设备模型的理解以及对4类通信对象的掌握。本文先对CANopen协议进行削析,再重点介绍在PICl8F458单片机上开发基于CANopen协议的节点,最后通过温度测控系统实验验证了系统信息传递的可靠性、准确性和实时性。 1 CANopen通信协议简介 CANopen协议是
[单片机]
PIC18<font color='red'>单片机</font>的CANopen通信协议
使用单片机实现GPRS通信小系统的研究
0 引 言 GPRS(通用分组无线电业务)是利用包交换的概念发展的一套无线传输方式。GPRS网络是基于现有的GSM(全球移动通信系统)网络实现的。在现有的GSM网络中需要增加一些节点,如GGSN(GPRS网关支持节点)和SGSN(GPRS服务支持节点)。SGSN的主要作用是记录移动终端的当前位置信息,并且在移动终端与GGSN之间完成移动分组数据的发送和接收。GGSN主要起网关作用,可以与多种不同的数据网络连接,如ISDN(综合业务数字网)、PSPDN(包交换公用数据网)和LAN(局域网)等。GGSN可以把GSM网中的GPRS分组数据包进行协议转换,从而把这些分组数据包传送到远端的TCP/IP或X.25网络。 GPRS网不但具有
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved