#太原理工大学机器人团队# 学习单片机的第8天

本文介绍了单片机控制数码管显示的技术,包括无锁存器和有锁存器的静态显示,以及数码管动态扫描显示的工作原理。通过实例展示了如何编写程序控制数码管显示数字和字母,并探讨了消影技术的重要性,帮助理解单片机与数码管的交互过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接着上一篇的数码管笔记

上一篇笔记我们了解了数码管是如何通过锁存器实现静态显示,今天我们来举个例子

假设我们要求第一个数码管显示“8”数字

#include <areg52.h>
sbit duan=P2^6;         
sbit wei=P2^7;         //分别对两个锁存器进行声明
void main()
{
   
  wei=1            //打开U2锁存器
  P0=0xFE;         //将位选的信息送进去
  wei=0;           //关闭U2锁存器
  duan=1;          //打开U1锁存器
  P0=0x7F;         //送入段选的信息   
  duan=0;          //关闭U1锁存器
  while(1);
}

对于位选,0xFE表示11111110,因为数码管是共阴极,公共端也就是位选端代表阴极,段选端为阳极,电流从段选端,也就是那个abcdefgh口流入,从位选端流出,因此位选端低电平的时候才算是选中。关于段选,0x7F表示01111111,只有段选为高电平的时候,被选中的二极管才会发光。

以后记住了,共阴极数码管,段选要高电平,位选低电平;共阳数码管,段选低电平,位选高电平。

这里关于最后的while还要说明一下,如果没有这个while,单片机是会一直重复这个程序的,也就是说我们会看到数字并非前一刻看到的数字(当然数字是一样的),加了个while后单片机执行到这里就不在下去了,我们看到的数字仍就是前一刻的数字。

从上面我们可以看见,每次选择公共端以及发光二极管的时候,我们都要把相应的二进制数写出来,还要转换成十六进制,这样在输入次数多的情况下未免显得十分繁琐,因此我们不妨在程序的最开始便把所有的数字字母的编码列出来,之后直接引用即可。

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

这个编码的定义方法和C语言中的数组定义差不多,就是在数据类型后面多了一个code,表示编码的定义。这里要注意,单片机的C语言定义一个数组是占用内存空间RAM的,而定义一个编码则是占用程序储存空间中,很显然后者能够提高内存空间使用效率的

unsigned char表明数据类型,table表示这个数组的名称,以后引用数组就打名称。这一窜编码表示0~9、A、b、C、d、E、F,当然我们也可以将数码管玩出很多的图案,这就需要我们自己去写出各自的编码了

调用数组内的编码方式

P0=table[3]这样就将数组中的第四个编码赋给了P0口,P0=0x4f这里强调下,[]中的数字是从0开始计算的,也就是说数字0对应第一个编码,以此类推。

接下来用以上掌握的只是来重新编写一个共阴极数码管静态显示的程序

#include <reg52.h>
#define uint unsigned int
sbit duan=P2^6;
sbit wei=P2^7;
unsigned char code a[]{
   0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 
                       0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
void delay(uint)
void main()
{
   
  wei=1;
  P0=0xc0;           //0xc0=11000000
  wei=0;
  while(1)
  {
   
    for( unsigned 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值