蓝桥杯单片机设计与开发笔记(三)
来源:互联网 发布:淘宝上在哪里买微信号 编辑:程序博客网 时间:2024/06/10 00:01
数码管显示几乎是每次蓝桥杯单片机设计与开发组竞赛的必考部分,相对于使用LCD1602作为显示设备,使用数码管来显示能够更好的考察参赛选手的单片机基本功,因为CT107D开发平台的设计使得数码管的显示不仅牵扯到数码管显示的 基本内容,还涉及到74HC573锁存器,74HC02异或门,74HC138译码器,以及中断的知识,所以这是值得我们重视的一个部分。
一、原理分析
根据CT107D的原理图我们可以看出,数码管显示同样涉及到74HC573、74HC138和74HC02,这与上一节中的LED灯、继电器和蜂鸣器的控制大同小异。如下图,蓝色标注为位选控制端口,由锁存器U6来控制,需配置红色标注的Y6C来控制锁存;黄色标注为段选控制端口,由锁存器U7来控制,需配置红色标注的Y7C来控制锁存。
而,控制Y6C与Y7C则需要通过74HC18和74HC02来进行控制,如下图,Y6C由Y6和WR共同控制,74HC02是一个4路2输入或非门功能,WR为低电平,要使Y6C为高,则Y6必须为低电平,即74HC138译码器的三个输入端应该为100,即P2^7=1,P2^6=0,P2^5=0。又只需要操作P2口的这三位,不需要配置其他的五位,所以P2端口应该配置为:P2 = ((P2&0x1f)|0xC0)。同理,控制Y7C时P2端口应该置为:P2 = ((P2&0x1f)|0xE0)。
二、示例程序
这里采用前后台的编程思想,即使用定时器中断来处理显示部分,作为前台,而逻辑处理与数据采集部分等则在主程序流程中来完成,作为后台。在下面这段程序中,定时器每隔2ms中断一次执行一次显示程序,然后继续执行主程序的任务,我们只要修改需要显示的数组即可实现显示不同的数值,使显示部分模块化,程序显示部分只提供外部接口(数组),不修改显示函数,这样不容易出错,而且能够使显示更方便。
#include "reg52.h"#define uchar unsigned char#define uint unsigned intuchar code tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //共阳极数码管段选编码数组uchar dspbuf[] = {10,10,10,10,10,10,10,10}; //显示数据的数组uchar dspcom = 0; //位选控制变量void display() //显示函数{ P2 = ((P2&0x1f)|0xE0); //段选消隐 P0 = 0xff; P2 &= 0x1f; P2 = ((P2&0x1f)|0xC0); //位选 P0 = 1<<dspcom; //共阳极数码管位选 P2 &= 0x1f; P2 = ((P2&0x1f)|0xE0); //段选 P0 = tab[dspbuf[dspcom]]; P2 &= 0x1f; if(++dspcom == 8){ //位选编码,循环显示8位 dspcom = 0; } }void main(){ TMOD = 0x01; //定时器0工作方式1 TH0 = (65536-2000)/256; //初始化 TL0 = (65536-2000)%256; ET0 = 1; //开定时器0中断允许位 EA = 1; //开总中断 TR0 = 1; //开定时器0 while(1) { dspbuf[0] = 1; //要显示不同的数据只需要修改此数组的值即可 dspbuf[1] = 2; dspbuf[2] = 3; dspbuf[3] = 4; dspbuf[4] = 5; dspbuf[5] = 6; dspbuf[6] = 7; dspbuf[7] = 8; } }void timer0() interrupt 1 //定时器0中断服务函数{ TH0 = (65536-2000)/256; TL0 = (65536-2000)%256; display(); //2ms显示一次}
- 蓝桥杯单片机设计与开发笔记(三)
- 蓝桥杯单片机设计与开发笔记(二)
- 蓝桥杯单片机设计与开发笔记(一)
- 蓝桥杯单片机设计与开发笔记(四)
- 单片机设计与开发
- 蓝桥杯单片机设计与开发之数码管
- 蓝桥杯单片机设计与开发笔记之LED流水灯模块
- 《javascript设计模式与开发实践》阅读笔记(三)
- 蓝桥杯单片机设计与开发之蜂鸣器继电器
- 51单片机学习笔记(三)
- 【单片机笔记】中颖单片机开发笔记
- AVR单片机开发笔记
- Linux嵌入式实时操作系统开发与设计(三)
- 分布式设计与开发(三)------高一致性服务ZooKeeper
- 分布式设计与开发(三)------高一致性服务ZooKeeper
- 分布式设计与开发(三)------高一致性服务ZooKeeper
- 分布式设计与开发(三)------高一致性服务ZooKeeper
- 分布式设计与开发(三)------ 高一致性服务ZooKeeper
- Java数据类型转换汇总 (持续更新)
- 文章标题@property生成的是私有变量,即,实在implementation 中生明的
- 关于python 的url_encode关于的嵌套字典类型变量的编码扩展
- 小区的路
- 部分和问题
- 蓝桥杯单片机设计与开发笔记(三)
- MySQL系列(一)mysql的安装
- 例程3. 串口 -- 慕司板IAP15
- Objective-C中@property的所有属性详解
- Java实现字符串倒序输出的常用方法小结
- 高速系统中滤波电容的选择
- fzu2127
- notepad++ 编辑GAMS文件
- 【开源】Caffe、TensorFlow、MXnet三个开源库对比