单片机原理及应用:数码管的静态显示

数码管的显示方法有静态显示和动态显示两种。静态显示是指单片机输出特定的电平或脉冲信号,相应的发光二极管恒定导通或恒定截止,从而将数据或符号显示在数码管显示屏上。之前介绍的数码管循环显示就属于静态显示。

本次要介绍的是多位数码管的静态显示。

电路连线

电路如图所示,两个数码管分别接单片机的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();	  
	  } 
  }*/  
  1. 数据分割在单片机中很常用,后面的动态显示、计数器都会用到
  2. keil规定局部变量的定义要放在所在函数体内的第一行,可见http://t.csdnimg.cn/eEuvh
  3. 代码提供了两种方法,但是单片机处理能力有限,不建议使用函数嵌套

视频演示

多只数码管静态显示

以上就是数码管静态显示的全部内容了,之后我们会一起来研究数码管的动态显示,谢谢大家。 

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值