点亮一个数码管

TF0:只要溢出后,tf0就置1.

只需要知道1和2两种工作模式即可。

使用流程如下:

附上数码管真值表:

完整代码如下:(每秒增加一个显示)

#include <reg52.h>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,选择数码管DS1ADDR3 = 1;ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;TMOD = 0x01;  //设置T0为模式1TH0  = 0xB8;  //为T0赋初值0xB800TL0  = 0x00;TR0  = 1;     //启动T0while (1){if (TF0 == 1)        //判断T0是否溢出{TF0 = 0;         //T0溢出后,清零中断标志TH0 = 0xB8;      //并重新赋初值TL0 = 0x00;cnt++;           //计数值自加1if (cnt >= 50)   //判断T0溢出是否达到50次{cnt = 0;            //达到50次后计数值清零P0 = LedChar[sec];  //当前秒数对应的真值表中的值送到P0口sec++;              //秒数记录自加1if (sec >= 16)      //当秒数超过0x0F(15)后,重新从0开始{sec = 0;}}}}
}

关于如何算th和tl:

比如当晶振频率为11.0592M的晶振。则每秒可产生机器周期为11.0592/12=0.9216M的机器周期,也就是921600个机器周期。50ms等于0.05秒,所以需要921600*0.05=46080个机器周期;定时器在方式1工作,为16位,最大值为65536,所以需设初值为65536-46080=19456;转为16进制为(4c00),所以高位TH0=0x4c; TL0=0x00;


动态显示多个数码管

10ms内需要刷新同一个数码管。

关于中断 :


完整代码:

/*
*******************************************************************************
*                     《手把手教你学51单片机(C语言版)》
*                    配套 KST-51 单片机开发板 示例源代码
*
*         (c) 版权所有 2014 金沙滩工作室/清华大学出版社 保留所有权利
*                 获取更多资料请访问:http://www.kingst.org
*
* 文件名:main.c
* 描  述:第6章 数码管动态显示原理示例(if...else if...语句示例)
* 版本号:v1.0.0
* 备  注:详情见第6章6.4节
*******************************************************************************
*/#include <reg52.h>sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;unsigned char i = 0;    //动态扫描的索引unsigned int  cnt = 0;  //记录T0中断次数
unsigned char flagls =0;unsigned char code LedChar[] = {  //数码管显示字符转换表0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[6] = {  //数码管显示缓冲区,初值0xFF确保启动时都不亮     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF      //缓冲区的作用就是先把该显示的数据存进去,后再取出值,这样可以提高运行速度
};void main()
{unsigned long sec = 0;  //记录经过的秒数ENLED = 0;    //使能U3,选择控制数码管ADDR3 = 1;    //因为需要动态改变ADDR0-2的值,所以不需要再初始化了TMOD = 0x01;  //设置T0为模式1TH0  = 0xFC;  //为T0赋初值0xFC67,定时1msTL0  = 0x67;TR0  = 1;     //启动T0EA = 1;ET0 = 1; //开启中断while (1){if (flagls == 1)  //判断T0溢出是否达到1000次  (一秒){flagls = 0;sec++;        //秒计数自加1//以下代码将sec按十进制位从低到高依次提取并转为数码管显示字符LedBuff[0] = LedChar[sec%10];          //sec如果等于123456秒 %10就赋值6LedBuff[1] = LedChar[sec/10%10];LedBuff[2] = LedChar[sec/100%10];LedBuff[3] = LedChar[sec/1000%10];LedBuff[4] = LedChar[sec/10000%10];LedBuff[5] = LedChar[sec/100000%10];}}
}void InterruptTime0() interrupt 1    //TF自动清零
{TH0 = 0XFC;TL0 =0X67;cnt ++;if(cnt >= 1000){cnt =0;flagls = 1;}//以下代码完成数码管动态扫描刷新P0=0xff;//杜绝鬼影现象,即addr没有完全切换时,产生的错误显示。switch (i){case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0]; break;case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1]; break;case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2]; break;case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3]; break;case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4]; break;case 5: ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5]; break;default: break;}}

单片机学习笔记(数码管)相关推荐

  1. 单片机学习笔记-数码管的显示

    单片机学习笔记-数码管的显示 数码管的显示 1.首先我们来看一下开发板的原理图 由管脚分配可知,数码管的末端(也就是LED端),是由74138译码器来控制的. 2.下面是数码管显示的函数 这里我们使用 ...

  2. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  3. 单片机学习笔记 —— 8位数码管动态扫描

    我们知道,依次只能让一个数码管/led灯亮起来,但是我们可以通过高频动态扫描得到8位数码管同时亮起来,这里介绍如何实现. 一.八位数码管 1.八位数码管原理图 下图为原理图: 段选信号:P0[7-0] ...

  4. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

  5. AutoLeaders控制组—51单片机学习笔记

    文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...

  6. C51单片机学习笔记之定时器

    简介 "定时器/计数器"说的是一个东西,因为它既能计时也能计数.是存在于单片机内部的一个独立的硬件部分,依赖晶振产生固定的时间间隔,产生了一定量的固定时间间隔后会引发定时器中断从而 ...

  7. 单片机学习笔记 —— 按键消抖

      按键是我们学习单片机时一个重要的器件,我们在按下按键时,难免会一位手抖动或者接触不稳定,但如果不消抖,按键按下的瞬间将会产生成百上千次按键有效的结果,最终的现象不可预料,所以有必要进行消抖. 一. ...

  8. [单片机学习笔记](35):串级PID算法应用剖析、通过串口控制电机、MPU6050获取平衡车姿态、自制平衡车PID算法程序设计

    串级PID算法应用剖析 这是经过给队友讲解串级PID的程序的之后的进一步的理解总结. 内环的实际值,取决于你能测出什么值给内环.而内环的输入就是内环误差 内环的输出值,是内环误差(内环目标值-内环实际 ...

  9. 51单片机学习笔记-1简介及点灯

    51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...

  10. ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi

    ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi 暂停了半个多月的学习,去调车了.现在课设开始了,赶紧回来把一开始的"以太网"目标学完.但是却发现,好 ...

最新文章

  1. ​每日一皮:​入职新公司第一周的感受...
  2. kafka架构:分区机制详解
  3. mysql中b树索引_Mongo和Mysql中的B树索引
  4. 用鸿蒙取名好吗,“鸿蒙”两个字,还是古人写得好看…
  5. Script的加载方法小结
  6. 数据增强操作(旋转、翻转、裁剪、色彩变化、高斯噪声等)
  7. flutter 集成融云 sdk
  8. matlab 排序 sorttrows
  9. 网页html生成图片的常用方案
  10. c语言choice的用法,名词choice的用法与搭配
  11. 浏览器显示域名解析错误怎么办
  12. 范数不等式 琴生兄弟不等式 补全百度
  13. DirectX技术----D2D基础篇(一)
  14. GC日志可视化分析工具GCeasy和GCViewer
  15. python中print函数的end和sep参数的用法
  16. Jackson对泛型的序列化和反序列化方法汇总
  17. ​2022年云市场营收排行榜
  18. 双重差分 difference-in-differences
  19. Redis 系列文章导读
  20. vue多张图片实现TV端长图浏览组件

热门文章

  1. 2021杭电多校第三场 D题—Game on Plane(思维题)
  2. wordpress主题模板开发制作教程
  3. 【C语言】从你好世界开始
  4. 《实变函数简明教程》,P63,可测集上的连续函数一定可测
  5. ubuntu18.04通过deb文件安装软件
  6. 旋转矩阵是正交矩阵与伴随性质的证明
  7. python got an unexpected keyword argument
  8. 计算机类教学期刊,热门大学计算机教学论文参考文献 大学计算机教学核心期刊参考文献哪里找...
  9. 数独游戏思路html,全民数独游戏规则介绍 数独技巧及题目解答思路
  10. [Azure - VNet] 解决办法:Azure P2S VNet无法建立网络连接。“parameter is incorrect“ (Error 87 参数错误)