51单片机(普中 清翔)-----显示数码管部分
目录
原理图
段选部分
位选部分
显示原理
先位选,再段选
显示数字
显示不同位置上的不同数字
原理图
段选部分
位选部分
显示原理
先位选,再段选
先对P2^2,P2^3,P2^4赋值,进行位选,选择显示的数码管位置
//二进制101对应的是十进制5,在原理图图上Y0对应的是LED1
//所以101说明Y5有效,选择的是第6个数码管,允许LED6显示,而其他位不允许显示
P2^2 = 1
P2^3 = 0
P2^4 = 1
普中51开发版数码管使用的是共阴极数码管,给数字1点亮,给数字0不亮
开发板上是逆序为1,也就是说LED8是我们说的第一个数码管(从左往右数)
显示数字
#include <REGX52.H>unsigned char NixieTable[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,0x6f};0 1 2 3 4 5 6 7 8 9
void Nixie(unsigned char Location, Number)
{switch(Location){case 1:P2_4 = 1; P2_3 = 1; P2_2 = 1;break; //位码case 2:P2_4 = 1; P2_3 = 1; P2_2 = 0;break;case 3:P2_4 = 1; P2_3 = 0; P2_2 = 1;break;case 4:P2_4 = 1; P2_3 = 0; P2_2 = 0;break;case 5:P2_4 = 0; P2_3 = 1; P2_2 = 1;break;case 6:P2_4 = 0; P2_3 = 1; P2_2 = 0;break;case 7:P2_4 = 0; P2_3 = 0; P2_2 = 1;break;case 8:P2_4 = 0; P2_3 = 0; P2_2 = 0;break;}P0 = NixieTable[Number]; //段码}void main()
{
// P2_2 = 1; //二进制101 十进制5 对应LED6
// P2_3 = 0;
// P2_4 = 1; //位选,选中LED6
// P0 = 0x7d; //段选Nixie(7,2);while(1);
}
显示不同位置上的不同数字
那么在这里解释下数码管的消影就是比方说:
当我们要显示数码管的时候首先要:位选 段选、还要显示的话就还要 位选、段选,循环。
那么这样就会出现问题:首先是选择"位选端"给上低电平,然后是段选给上数据,然后给上下一位位选的数据。但是:由于我们单片机的速度是很快的,在段选到下一个位选之间就会出现问题。我们选中下一位这个时刻很短的时间内,上一个数据就会串到下一个数据。因为它们是挨着一起的,我在选中下一位之后 上一位的数据自然是会直接过来的。这样就会显示出数据的串位的问题了!
那么我们应该怎么避免这个问题?那我们就需要在上一个段选端给清零这样即使到下一位它也不会对上一位产生影响!因为以及清零了。所以在子函数上需要优化下,显示玩之后我们首先要延迟1ms这个是为了能让程序更加稳定显示 并且 进行清零!
#include <REGX52.H>unsigned char NixieTable[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x6f};void Delay(unsigned char ms) //@12.000MHz
{unsigned char i, j;while(ms){i = 2;j = 239;do{while (--j);} while (--i);ms--;}
}void Nixie(unsigned char Location, Number)
{switch(Location){case 1:P2_4 = 1; P2_3 = 1; P2_2 = 1;break; //位码case 2:P2_4 = 1; P2_3 = 1; P2_2 = 0;break;case 3:P2_4 = 1; P2_3 = 0; P2_2 = 1;break;case 4:P2_4 = 1; P2_3 = 0; P2_2 = 0;break;case 5:P2_4 = 0; P2_3 = 1; P2_2 = 1;break;case 6:P2_4 = 0; P2_3 = 1; P2_2 = 0;break;case 7:P2_4 = 0; P2_3 = 0; P2_2 = 1;break;case 8:P2_4 = 0; P2_3 = 0; P2_2 = 0;break;}P0 = NixieTable[Number]; //段码Delay(1); //软件消隐P2 = 0x00; //清零
}void main()
{while(1){Nixie(1,1);Nixie(2,2);Nixie(3,3);}
}
51单片机(普中 清翔)-----显示数码管部分相关推荐
- 51单片机 普中V2 交通灯 根据实物仿真
适合普中V2 板子 /* D7 D8舍弃不用 1111 1111 1110 1110 1110 1011 1111 0101 1101 1101 0~25秒 D5亮 D1亮 D3不亮 0xee 25~ ...
- 51单片机 普中V2 超声波测距 报警 显示 基于MCS51单片机的超声波测距模块的开发
基于MCS51单片机的超声波测距模块的开发 采用C51程序设计语言,完成下列功能要求. l 必选功能: (1) 超声波模块和单片机的接口设计,画出完整的电路原理图.(15分) (2) 开发板上电时,显 ...
- 51单片机 普中V2 数字时钟 电子时钟 万年历 DS1302 LCD1602 AT24C02
1 一个普通的万年历 仿真图和hex文件 点我 仿真软件proteus 8.9 的安装 点我 硬件:DS1302.按键.LCD.蜂鸣器 要求: 1.读出DS1302芯片当前的内容,在LCD上显示. 2 ...
- 51单片机 普中V2 电子琴 仿真
16个按键,每个按键按下都是不一样的音调.LCD显示当前音调. void main() {init_timer();TR1 = 0; /* 关闭定时器 */sound = 1; /* 关闭蜂鸣器 */ ...
- 打地鼠java代码流程图_51单片机 普中51 打地鼠游戏 仿真 程序 流程图
51单片机 普中51 打地鼠游戏 仿真 程序 流程图 51单片机 普中51 打地鼠游戏 仿真 程序 流程图 普中51-单核-A3&A4开发板原理图 用到数码管.LED.矩阵按键 描述: (1) ...
- 51单片机入门教程(3)——数码管显示
51单片机入门教程(3)--数码管显示 一.LED数码管简介 二.数码管静态显示 三.数码管动态显示 特别鸣谢:HFUTer-朱聪强 一.LED数码管简介 LED数码管(LED Segment Dis ...
- 如何使用keil进行编译并且用proteus进行51单片机仿真实现0~F的数码管字符显示
文章目录 一.目的: 二.在keil中进行程序编译 三.在proteus上画出电路图 四.将keil中编译的hex文件在proteus电路图中进行仿真运行 一.目的: 使用keil进行编译并且用pro ...
- 【Proteus仿真】51单片机汇编实现DS18B20+LCD1602显示
[Proteus仿真]51单片机汇编实现DS18B20+LCD1602显示 Proteus仿真 汇编代码(.asm) ;**************************************** ...
- 51单片机LED点阵屏逐帧显示和流动显示图像
上一篇逐帧显示用的是定时和中断控制,碰到了一些麻烦,我觉得也是一种不错的办法,因为Delay的时间更短,而且如果不那么介意亮度的情况甚至可以不用Delay()函数,这里采用将要显示的图像按顺序存储在数 ...
最新文章
- java实现线性表的顺序存储
- vc 显示非模态对话框
- 谁来护航储能电池安全?
- 【SAP】PO中“交货已完成”的功能解析
- [css] 举例说明BFC会与float元素相互覆盖吗?为什么?
- 文件批量处理器Android,GFileBat 2012(文件批量处理器)V1.1 正式版
- 在JavaWeb中,什么是监听器?(建议收藏)
- Jquery和angularjs获取check框选中的值小技巧
- sam机架和kx连线图_独立声卡 kx DSP连线图详细教程(SAM机架使用的DSP连线图)
- linux用迅雷下载软件,wine 迅雷下载安装(wine 迅雷极速版)
- ​元宇宙与AI热度不减,Gartner 2023 年十大战略技术趋势完整解析
- 美国11月PMI现回落 市场关注10月PCE通膨数据
- 360wifi驱动linux驱动安装,ubuntu安装360随身wifi驱动
- Sky Walking 介绍 及 8.7.0 源码学习环境搭建
- requests.exceptions.SSLError: HTTPSConnectionPool(host=‘edith.xiaohongshu.com‘, port=443): Max retri
- 雷军:《我十年的程序员生涯》系列之三(失败的大学创业经历)
- 苹果敢对“赞赏”分成30%真的是靠垄断吗?
- 优秀的软文标题应该怎么起才能吸引人?
- JavaScript常用事件及其区别
- Shogun网站上的关于主流机器学习工具包的比较