先上代码:

#include <reg52.h>
#define uchar unsigned char  
#define uint unsigned int
sbit SegSel=P2^6;                              //段选
sbit BitSel=P2^7;                              //位选
unsigned char code table[]={                   
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; //数码管编码0123456789
unsigned char code wei[]={                   
0xfe,0xfd,0xfb,0xf7,0xef,0xdf};                //数码管位123456

uint D[6]={1,2,3,4,5,6};                       //数码管数字

//函数声明
void delay_ms(uint x);                         //延时函数
void show();                                   //数码管动态显示函数

//主函数
void main()
{
    while(1)
    {
        show();
    }
}


void delay_ms(uint x)
{
    uint i,j;
    for(i=x;i>0;i--)
    for(j=240;j>0;j--)
    ;
}
void show()
{
    uint i;
    for(i=0;i<6;i++)
    {
        BitSel=1;P0=wei[i];BitSel=0;SegSel=1;P0=table[D[i]];SegSel=0;delay_ms(1);
    }
}

解释:
数码管的动态显示,其实就是一个快速的静态显示的过程。只要显示时间适当,由于人眼的暂时停留功能,我们会以为它停留在那里不动。

0
Posted in K60

Leave a Comment:

电子邮件地址不会被公开。

  1. 南城

    在proteus上仿真的时候会显示不完整

    0

    回复

    1. 花梓

      哦哦哦,很抱歉哈,我并没有在proteus上试过,我当时是直接编译器运行的。

      0

      回复