单片机原理及应用:数码管的静态显示
2023-12-29 09:30:47
数码管的显示方法有静态显示和动态显示两种。静态显示是指单片机输出特定的电平或脉冲信号,相应的发光二极管恒定导通或恒定截止,从而将数据或符号显示在数码管显示屏上。之前介绍的数码管循环显示就属于静态显示。
本次要介绍的是多位数码管的静态显示。
电路连线
电路如图所示,两个数码管分别接单片机的P0、P1端口,公共端采用共阳极接法,此外为了接线整齐,采用了网络标号法。
网络标号法(Netlist Method)是一种将电路原理图中的元件和连接进行编码的方法,用于在仿真和布局布线过程中保持电路的一致性。通过网络标号法,可以将电路中的元件和连接关系转换为电路的逻辑和物理表示。
网络标号法是在连接线的交叉点或连接点处分配网络标号。网络标号用于标识电路中的节点。可以使用数字、字母、下划线等进行标号,并根据需要在标号后面添加字母进行区分。
首先选中左侧功能栏的终端模式,然后在电路图上双击左键就能得到一根“针”。
再双击这个符号,就能把它拖动到想要的地方去。
选中该符号,右键打开菜单选择编辑属性。
在“标签”中写入需要连接的单片机引脚编号即可。这样两个元件就相当于用导线接通了。
代码举例
#include<reg52.h>
#define uchar unsigned char
uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极接法的0-9位
void delay (void)
{
unsigned char i,j;
for(i=255;i>0;i--)
for(j=255;j>0;j--) ;
}
void main(void)
{ uchar i; //用于计数
uchar j; //储存十位
uchar k; //储存个位
//局部变量定义需要放在最前面,否则会报错
P0=~0x6f;
P1=~0x6f;
delay();delay();
//可以设置数码管刚点亮时的初始值
//如果不加for循环,仅用赋值的方式点亮数码管也是动态显示
while(1)
{
for(i=0;i<100;i++)
{
j=i/10; //这个步骤称为数据分割。通过取整和取余来获取十位和百位
k=i%10;
P0=~seg[j]; //数组里储存的是共阴极段码,而电路是共阳极接法
P1=~seg[k]; //共阳和共阴之间的真值表,就差一个取反操作
delay();delay();
}
}
}
/*//第二种写法
for(i=0;i<10;i++) //十位
{
for(j=0;j<10;j++) //个位
{
P0=~seg[i];
P1=~seg[j];
delay();delay();
}
}*/
- 数据分割在单片机中很常用,后面的动态显示、计数器都会用到
- keil规定局部变量的定义要放在所在函数体内的第一行,可见http://t.csdnimg.cn/eEuvh
- 代码提供了两种方法,但是单片机处理能力有限,不建议使用函数嵌套
视频演示
多只数码管静态显示
以上就是数码管静态显示的全部内容了,之后我们会一起来研究数码管的动态显示,谢谢大家。?
文章来源:https://blog.csdn.net/qq_62530454/article/details/135280609
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!