C51学习笔记(一)---数码管显示
来源:互联网 发布:淘宝仓库中的宝贝不见 编辑:程序博客网 时间:2024/05/17 23:28
最近开始研读郭天祥的《新概念51单片机C语言教程》,感觉良好,边学习边通过TX的51开发板实验,长了不少见识,对硬件也有了新的体验,为了巩固学习成果, 特写一下笔记,以供以后查阅。
这篇笔记针对第三章节的“数码管的显示原理及应用实现”,理解数码管的原理,静态显示和动态显示的实现过程。
基本概念
数码管就是通过几个发光二极管组成,可以实现数字显示的电子器件。按照引脚的连接方式可以为共阴和共阳,原理图如下所示:
由上图中的电路可知,针对共阴极的,所有阴极(称为公共端)共同接地,为引脚加高电平,即可点亮。针对共阳极的情况,阳极(公共端)共同接一个高电平,只需要给引脚低电平,即可点亮。这两种数码管显示同一个数字的编码会有所不同。拿到数码管后,可通过万用表来测试出是共阴还是共阳。
一般情况下,一位数码管有10个引脚,两位数码管也是10个引脚,四位数码管是12个引脚。
对于多位一体的数码管有必要知道它内部的引脚连接方式:公共端是独立的引脚(称做位选线),而负责显示成什么数字的段引脚(称作段选线)是共用的,即每个位的a、b...g是分别连接在一块的。这样在使用中需要分两步,先通过位选线确定要操作哪个位置上的数码管,再通过段选线来输送相应的信号以显示指定的数字内容。
明白数码管内部结构后,使用起来就容易了,段选和位选都可通过锁存器来将某I/O口的信号输送给数码管了,具体就根据实际情况来连接电路了。
关于数码管的动态显示和静态显示,我的理解就是静态显示是让段引脚一直保持某状态,达到显示的效果,动态扫描显示是针对多位数码的情况,快速依次让每一位显示相应的内容,快到以至于肉眼看到的效果是多位同时显示内容,而看不到多位切换的效果。
TX开发板上具体电路可参考该书第三章,这里直奔代码
/**************************************************************************************Module Name:用数码管动态显示数字Module Date:Module Auth: magcDescription:Others: Revision History: Date Rel Ver Notes **************************************************************************/#include <reg52.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint);void output_num(uint duan,uint wei,uint deplay_s);sbit duan_ea = P2^6; //段选位,U1锁存器端sbit wei_ea = P2^7;//位选位,U2锁存器端// 数码管显示数字的编码表uchar code table[] = { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};// 位选编码表,定位第1~6个位uchar code wei_table[] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};/**************************************************************************Function Name:主函数Function Description:Inputs:Outputs:Notes:**************************************************************************/void main(){ //第一步:先选择要显示的数码管 //第二步:再输送内容的信息 uint i; //主循环过程 while(1){ for (i = 0; i < 6; i++) { //依次在1~6位上分别显示0~5数字 output_num(table[i],wei_table[i],500); } }}/**************************************************************************Function Name: 指定一个数码管来显示指定的数字内容Function Description:Inputs: duan:段选信号,wei:位选信号,deplay_s:延时时长Outputs:Notes:**************************************************************************/void output_num(uint duan,uint wei,uint deplay_s){ //输送位选数据 wei_ea = 1; //打开位选锁存器 P0 = wei;//通过P0输送信号 wei_ea = 0;//关闭位选的锁存器 P0 = 0xFF; //避免影响下一次输送数据,有必要“消影” //输送段选数据 duan_ea = 1; //打开段选的锁存器 P0 = duan;//通过P0输送信号 duan_ea = 0;//关闭段选的锁存器 P0 = 0xFF;//清影 delay(deplay_s);//延时一下}/**************************************************************************Function Name:延时指定时间Function Description:Inputs:Outputs:Notes:**************************************************************************/void delay(uint t){ uint i,j; for(i = t;i>0;i--){ for (j = 0; j < 110; j++); }}
经过Keil的编码生成Hex文件,再通过ISP软件传至开发板芯片中,运行的效果就是六个数码管,依次显示0~5数字,当每次显示的延时越短时,数字移动显示越快,快到一定程序,就可看到六个同时显示0~5数字了。
小结:
51单片机给我了们与硬件亲密接触的机会,使用单片机也就是通过它的硬件资源实现控制或简单计算的目的,电路连接要尊重各器件的“品性”,给予合理的电信号,必要时添加其它器件辅助实现连接。
通过C语言,可以简单快捷地操作单片机上的资源,注意体会这种近距离操作硬件的过程,了解了,才会发现硬件并不难。
- C51学习笔记(一)---数码管显示
- C51单片机学习(一):LED和数码管静态显示
- FPGA学习笔记一(数码管显示)
- C51单片机学习(三):数码管动态显示和键盘
- C51学习笔记(二)---中断及数码管应用
- ds1302 数码管显示 C51
- (C51学习二)点亮数码管
- 学习笔记 从零开始学单片机(2) 全八段数码管显示
- FPGA学习笔记二(数码管动态显示)
- 单片机学习笔记(三)——数码管显示
- C51驱动数码管显示0~99
- 80C51 单片机 数码管显示循环数字
- C51单片机数码管的显示代码
- 80C51 数码管动态显示0~7
- 80C51单片机学习笔记(一)
- 20141016 【Arduino + C51单片机】 八段数码管--数字循环显示
- 51单片机学习笔记(二) 单个数码管显示1到9
- MSP430学习笔记6-动态数码管的显示
- repo用法详解
- 浏览器CSS兼容
- 设置Ubuntu上的MySQL可以远程访问
- java中的volatile是干什么的
- 根据WSDL的URL来获取服务中的所有方法
- C51学习笔记(一)---数码管显示
- 怎样获取本地计算机IP和计算机名
- 打印管理
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- Make_Samba_Go_Faster
- msvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义
- 编译SDL问题
- db2和oracle的一些区别
- oracle导出错误:LRM-00112: 参数 'query' 不允许有多个值