51单片机 数码管显示

本文介绍了51单片机操作数码管的基础知识,包括直接操作寄存器的方式和数码管的工作原理。通过示例代码解析了数码管的静态显示过程,以及如何通过位选和段选控制数码管显示不同内容。同时,提出了动态显示的思路,即利用位选和段选数组配合for循环实现多位数码管的滚动显示,并给出了一个动态显示数字‘1234’的完整代码实例。
摘要由CSDN通过智能技术生成

本篇文章记录下自己对51单片机数码管的理解
51单片机的操作 个人理解为直接操作寄存器 不像stm 32 那样 可以使用库来进行开发
这个是在网上找个一个数码管的代码 我们直接进行分析

#include<reg52.h>
sbit dula=P2^6;//申明,P2^6是段选
sbit wela=P2^7;//申明,P2^7是位选
main()
{
	wela=1;  //打开位选
	P0=0xfe;//送入位选信号,确定哪几个数码管发光
	wela=0;//关闭位选
 
	dula=1;//段锁
	P0=0x5e;//0x06代表1,确定数码管显示哪些字符 0~F
	dula=0; 关闭段选 
	while(1);
}

代码分析
每次要使用 数码管时在主函数 中先打开位选,再送入位选信号,再关闭位选然后再打开段选,输送段选信号,关闭段选
位选 是确定第几个数码管进行显示 因为是阴极数码管 我们要点亮它 直接给他输一个低电平 上面的例子 是直接操作第一位的数码管

段选 是确定 数码管显示的内容 有0~到F 的选项

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

显示内容可以从这个数组中进行选择
上面的代码是实现数码管的静态显示

对于数码管的动态显示 我们直接使用for循环
个人的思路是对于位选和段选都设置位数组 然后使用for 循环 进行移位

uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //段选数据表

uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; //位选

就是将位选的选择封装到数组里面 我们在使用时直接使用数组的第几个元素就行
例子
本次实验让4片数码管显示“1234”,

#include<reg52.h>
#define uchar unsigned char;
#define uint unsigned int;
sbit du=P2^0; //位定义段选端
sbit we=P2^1; //位定义位选端


uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //段选数据表

uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; //位选数据表

uchar i,j,z;
uint numd,numw;

void delay(z)   //延时子函数
{
   for(j=z;j>0;j--)
      for(i=110;i>0;i--);
}
void display() //显示子程序
{
     P0=tabledu[numd]; //控制段显示
    delay(10);
    du=1; //打开段选信号
    du=0; //锁存信号
    P0=tablewe[numw]; //控制位选
    delay(10);
    we=1; //打开位选信号
    we=0; //锁存信号
    numd++; //段选自加
    if(numd==5)
    numd=1;
    numw++; //位选自加
    if(numw==4)
    numw=0;
}

void main()
{
      numd=1;
   numw=0;
   while(1)
   {
    
    display(); //调用显示子程序
    delay(30);

   }
  }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值