单片机学习笔记(数码管)
点亮一个数码管
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.首先我们来看一下开发板的原理图 由管脚分配可知,数码管的末端(也就是LED端),是由74138译码器来控制的. 2.下面是数码管显示的函数 这里我们使用 ...
- 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示
一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...
- 单片机学习笔记 —— 8位数码管动态扫描
我们知道,依次只能让一个数码管/led灯亮起来,但是我们可以通过高频动态扫描得到8位数码管同时亮起来,这里介绍如何实现. 一.八位数码管 1.八位数码管原理图 下图为原理图: 段选信号:P0[7-0] ...
- 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F
一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...
- AutoLeaders控制组—51单片机学习笔记
文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...
- C51单片机学习笔记之定时器
简介 "定时器/计数器"说的是一个东西,因为它既能计时也能计数.是存在于单片机内部的一个独立的硬件部分,依赖晶振产生固定的时间间隔,产生了一定量的固定时间间隔后会引发定时器中断从而 ...
- 单片机学习笔记 —— 按键消抖
按键是我们学习单片机时一个重要的器件,我们在按下按键时,难免会一位手抖动或者接触不稳定,但如果不消抖,按键按下的瞬间将会产生成百上千次按键有效的结果,最终的现象不可预料,所以有必要进行消抖. 一. ...
- [单片机学习笔记](35):串级PID算法应用剖析、通过串口控制电机、MPU6050获取平衡车姿态、自制平衡车PID算法程序设计
串级PID算法应用剖析 这是经过给队友讲解串级PID的程序的之后的进一步的理解总结. 内环的实际值,取决于你能测出什么值给内环.而内环的输入就是内环误差 内环的输出值,是内环误差(内环目标值-内环实际 ...
- 51单片机学习笔记-1简介及点灯
51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...
- ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi
ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi 暂停了半个多月的学习,去调车了.现在课设开始了,赶紧回来把一开始的"以太网"目标学完.但是却发现,好 ...
最新文章
- ​每日一皮:​入职新公司第一周的感受...
- kafka架构:分区机制详解
- mysql中b树索引_Mongo和Mysql中的B树索引
- 用鸿蒙取名好吗,“鸿蒙”两个字,还是古人写得好看…
- Script的加载方法小结
- 数据增强操作(旋转、翻转、裁剪、色彩变化、高斯噪声等)
- flutter 集成融云 sdk
- matlab 排序 sorttrows
- 网页html生成图片的常用方案
- c语言choice的用法,名词choice的用法与搭配
- 浏览器显示域名解析错误怎么办
- 范数不等式 琴生兄弟不等式 补全百度
- DirectX技术----D2D基础篇(一)
- GC日志可视化分析工具GCeasy和GCViewer
- python中print函数的end和sep参数的用法
- Jackson对泛型的序列化和反序列化方法汇总
- ​2022年云市场营收排行榜
- 双重差分 difference-in-differences
- Redis 系列文章导读
- vue多张图片实现TV端长图浏览组件
热门文章
- 2021杭电多校第三场 D题—Game on Plane(思维题)
- wordpress主题模板开发制作教程
- 【C语言】从你好世界开始
- 《实变函数简明教程》,P63,可测集上的连续函数一定可测
- ubuntu18.04通过deb文件安装软件
- 旋转矩阵是正交矩阵与伴随性质的证明
- python got an unexpected keyword argument
- 计算机类教学期刊,热门大学计算机教学论文参考文献 大学计算机教学核心期刊参考文献哪里找...
- 数独游戏思路html,全民数独游戏规则介绍 数独技巧及题目解答思路
- [Azure - VNet] 解决办法:Azure P2S VNet无法建立网络连接。“parameter is incorrect“ (Error 87 参数错误)