3.1-3.2 数码管及静态显示

多个数码管一起时候, 位选 是可单独控制的, 段选 是连接在一起的,通过位选信号控制哪个数码管亮;在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为他们的段选是连接在一起的,这种显示方法叫做静态显示。

题目1:让第一个数码管显示数字8.

#include <reg52.h>
sbit dula=P2^6;      //申明U1锁存器的锁存端
sbit wela=P2^7;      //申明U2锁存器的锁存端

void main()
{
wela=1;                //打开U2锁存端
P0=0xFE;             //位选,控制哪个数码管亮。第一个亮,其他都灭,送入位选信号P0= 1111 1110,即W1端对应数据为0,其他都为1. 
W1对应的是最后一位吗?!
wela=0;                //关闭U2锁存端

dula=1;                 //打开U1索存端
P0=0x7F;             //段选,控制这个数码管显示的内容,送入段选信号,显示8,h段为0,共阴极,1为亮,其余都为1,0111 1111  
h为0,0是第一位吗?!
dula=0;                 //关闭U1锁存端
while(1);               //程序停到这里

}

题目2:让6个数码管同时显示,从0~F依次显示,且间隔500ms,一直循环。

#include <reg52.h>
sbit dula=P2^6;      //申明U1锁存器的锁存端
sbit wela=P2^7;      //申明U2锁存器的锁存端

void delayms(uint x);
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

//这个定义表是本课程使用的电路图的数码管显示0~F的表示,简单起见可以直接调用。

uchar a;
void main()
{
wela=1;                //打开U2锁存端
P0=0xc0;               //6个全亮,送入位选信号P0= 1100  0000,即W1-6端对应数据为0,其他为1.
wela=0;                //关闭U2锁存端。6个全亮命令已经下发。
   while(1)
   {        
    for (a=0;a<16;a++)     
                 {
                  dula=1; 
                  P0=table[a];
                 dula=0;
                 delayms(500);
                 } 
    }  

//第一次用for语句执行数据的依次递增的执行动作,规定数目有限循环。刚好可以把a从0 到15全部取一遍。首先开始while循环,a=0,<16满足,执行一次点灯亮0,延续500ms,执行a++,a=2……a=15,<16满足,执行点灯FFF FFF,延续500ms,问题执行完毕,执行a++,a=16,<16不满足,跳出for循环,不继续点灯。这时候,while语句为真,继续执行for语句,a=0,又从0开始显示。                                     
}
void delayms(uint x)
{
  uint i,j;
  for(i=x,i>0,i--)
     for (j=110,j>0,j--);

猜你喜欢

转载自blog.csdn.net/weixin_44386138/article/details/121541218