微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机C语言程序设计:8 只数码管滚动显示数字、字符

单片机C语言程序设计:8 只数码管滚动显示数字、字符

时间:06-06 来源:互联网 点击:

/* 名称:8 只数码管滚动显示单个数字

说明:数码管从左到右依次滚动显示

0~7,程序通过每次仅循环选通一只数码

*/

#includereg51.h>

#includeintrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//延时

void DelayMS(uint x)

{

uchar t;

while(x--) for(t=0;t120;t++);

}

//主程序

void main()

{

}

uchar i,wei=0x80;

while(1)

{

for(i=0;i8;i++)

{

P2=0xff; //关闭显示

wei=_crol_(wei,1);

P0=DSY_CODE[i];发送数字段码

P2=wei; //发送位码

DelayMS(300);

}

}

/* 名称:8 只数码管动态显示多个不同字符

说明:数码管动态扫描显示 0~7。

*/

#includereg51.h>

#includeintrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//延时

void DelayMS(uint x)

{

uchar t;

while(x--) for(t=0;t120;t++);

}

//主程序

void main()

{

uchar i,wei=0x80;

while(1)

{

for(i=0;i8;i++)

{

P0=0xff;

P0=DSY_CODE[i];发送段码

wei=_crol_(wei,1);

}

}

}
/* 名称:8 只数码管闪烁显示数字串


*/

说明:数码管闪烁显示由 0~7 构成的一串数字

本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。

#includereg51.h>

#define uchar unsigned char

#define uint unsigned int

//段码表

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//位码表

uchar code DSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//延时

void DelayMS(uint x)

{

uchar t;

while(x--) for(t=0;t120;t++);

}

//主程序

void main()

{

uchar i,j;

while(1)

{

for(i=0;i30;i++)

{

for(j=0;j8;j++)

{

P0=0xff;

P0=DSY_CODE[j]; //发送段码

P2=DSY_IDX[j]; //发送位码

DelayMS(2);

}

}

P2=0x00; //关闭所有数码管并延时

DelayMS(1000);

}

}

/* 名称:8 只数码管滚动显示数字串

说明:数码管向左滚动显示 3 个字符构成的数字串

*/

#includereg51.h>

#includeintrins.h>

#define uchar unsigned char

#define uint unsigned int

//段码表

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//下面数组看作环形队列,显示从某个数开始的 8 个数(10 表示黑屏)

uchar Num[]={10,10,10,10,10,10,10,10,2,9,8};

//延时

void DelayMS(uint x)

{

uchar t;

while(x--) for(t=0;t120;t++);

}

//主程序

void main()

{

uchar i,j,k=0,m=0x80;

while(1)

{ //刷新若干次,保持一段时间的稳定显示

for(i=0;i15;i++)

{

for(j=0;j8;j++)

{ //发送段码,采用环形取法,从第 k 个开始取第 j 个

P0=0xff;

P0=DSY_CODE[Num[(k+j)%11]];

m=_crol_(m,1);

P2=m; //发送位码

DelayMS(2);

}

}

k=(k+1)%11; //环形队列首支针 k 递增,Num 下标范围 0~10,故对 11 取余

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top