当前位置: 首页 > news >正文

学习笔记|认识数码管|控制原理|数码管实现0-9的显示|段码跟位码|STC32G单片机视频开发教程(冲哥)|第九集:数码管静态显示

文章目录

  • 1.认识数码管
  • 2.控制原理
    • 十进制转换为任意进制
    • 其它进制转十进制
  • 3.数码管实现0-9的显示
    • 1.用数组定义0-9的内码
    • 段码跟位码的区别
    • 2.尝试用延时实现0-9的循环显示
    • 3.用按键控制数字的加或者减。
  • 总结
  • 课后练习:

1.认识数码管

数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更的表示数码管想要显示的内容;按能显示多少个(8)可分为1位、2位、3位、4位、5位、6位、7位等数码管。
在这里插入图片描述
按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
在这里插入图片描述

数码管内部是由多个发光二极管封装在一起组成,他们可以有很多种颜色,很多种外形,很多种样式,但是本质来说他们都是通过点亮内部的LED来显示的,只要面板做好了,理论可以显示任意的字符或者图案。
在这里插入图片描述
按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管,尾缀A表示共阳,K表示共阴
4位数码管:
在这里插入图片描述

2.控制原理

在这里插入图片描述

在这里插入图片描述
本节先点亮最后1个“8”,根据原理图,只需要P6和com0(P7.0)即可。
新建excel分析:
在这里插入图片描述
分别显示了二进制,10进制,16进制及对应关系。
可参考:进制之间的相互转换(超详细)。

十进制转换为任意进制

方法都大同小异,本质都是采用 求余法,如果是转换为二进制,则就是对 2 求余,如果转换为八进制,则就是对 8 求余。依此类推,直到商为0终止,并反向取余数(将结果 从下往上 进行排序)。

其它进制转十进制

基数乘以指数的n次方 法 。基数:进制数值本身(比如二进制数 1010,1010就是基数),指数:相应的进制值(二进制的指数就是:2,八进制的指数就是:8),n:表示基数的位置,以小数点分割,左边的数从0开始数,右边的数(也就是小数点后面的数)从 -1开始数。

3.数码管实现0-9的显示

1.用数组定义0-9的内码

以“3.按键控制LED“工程为模板,新建“5.数码管”。
定义数码管显示数组:

u8 SEG_Tab[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9

段码跟位码的区别

段指a b c d e f g dp等LED,段码是选择哪一划,位码是选择第几个8,

2.尝试用延时实现0-9的循环显示

用数组实现0至9的显示,数组索引可以用变量,这里定义u8 num。
main()函数修改如下:

void main()   //程序开始运行
{u8 num = 0;sys_init();usb_init();	//初始化USB代码EA = 1;while(1) //死循环{if( DeviceState != DEVSTATE_CONFIGURED ) 	//判断USB是否连接成功,最新版usb.h中该有定义continue;if( bUsbOutReady )    //判断有没有接收到数据{usb_OUT_done(); //接收应答(固定格式)}P70 = 0;			//开启一个数码管
//---------------------------P6 = SEG_Tab[num];	//这个数码管输出段码num++;if(num>9)num = 0;delay_ms(1000);}
}

实现了数码管0-9的循环。

3.用按键控制数字的加或者减。

调整while主循环代码,实现按键加减:

    while(1) //死循环{if( DeviceState != DEVSTATE_CONFIGURED ) 	//判断USB是否连接成功,最新版usb.h中该有定义continue;if( bUsbOutReady )    //判断有没有接收到数据{usb_OUT_done(); //接收应答(固定格式)}P70 = 0;			//开启一个数码管
---------------------------
//		P6 = SEG_Tab[num];	//这个数码管输出段码
//		num++;
//		if(num>9)
//			num = 0;
//		delay_ms(1000);P6 = SEG_Tab[num];	//这个数码管输出段码if (KEY1 == 0){delay_ms(10);if (KEY1 == 0){while(KEY1 == 0); //松开后继续执行以下程序if(num<9)num++;}}if (KEY2 == 0){delay_ms(10);if (KEY2 == 0){while(KEY2 == 0);if(num>0)num--;}}}

感觉有点单调,加个蜂鸣:

if (KEY2 == 0){BEEP = 0;delay_ms(10);BEEP = 1;while(KEY2 == 0);if(num>0)num--;}

先蜂鸣一声,松开按键后加或者减。

总结

1.了解数码管的数字内码的由来
2.学会数码管通过数组的方式获取数值

课后练习:

1.尝试使用数码管显示- H J L N o P U t r 等字母或符号。
2.通过一个按键设置数码管显示数字0-9循环,在按一下另一个按键的时候,数码管上显示的数字几,蜂鸣器就响几声。

http://www.lryc.cn/news/141495.html

相关文章:

  • CentOS 7/8 firewall 转发端口
  • mysql自动备份脚本
  • VUE笔记(九)vuex
  • Webpack高频面试题
  • 数字基带传输系统
  • FPGA使用MIG调用SODIMM内存条接口教程,提供vivado工程源码和技术支持
  • 深度学习数据预处理
  • [C++] STL_vector 迭代器失效问题
  • C语言暑假刷题冲刺篇——day5
  • 若依Cloud集成Flowable6.7.2
  • 动态不确定性的动态S过程(Matlab代码实现)
  • LoadRunner操作教程
  • .NET Core 实现日志打印输出在控制台应用程序中
  • Nginx正向代理与反向代理及Minio反向代理实操(三)
  • Xmake v2.8.2 发布,官方包仓库数量突破 1k
  • 加油站抽烟烟火智能识别算法
  • web前端开发中的响应式布局设计是什么意思?
  • 【LeetCode-面试经典150题-day14】
  • 【算法系列总结之分组循环篇】
  • 汽车摩托车零部件出口管理ERP解决方案
  • NPM 管理组织包
  • 蓝桥杯上岸每日N题 (修剪灌木)
  • docker harbor私有库
  • strcmp 的使用和模拟
  • 军用加固计算机
  • block层:5. 请求分配
  • L1-038 新世界(Python实现) 测试点全过
  • 【hello git】初识Git
  • Vueelementui动态渲染Radio,Checkbox,笔记
  • SpringDataRedis 使用