欢迎光临散文网 会员登陆 & 注册

51单片机100例实例之07例

2021-01-20 15:13 作者:技术流阿宅  | 我要投稿

//项目名称:8位数码管上同时显示多个不同字符

//项目再创作者:科技小宅神

//完成时间:2021/01/19

proteus仿真图


//项目备注:

//1、本例实现在8位数码管上同时显示多个不同字符。

//2、本例使用了8只集成式7段共阳数码管(pruteus中元件标识为7seg-mpx8-ca-blu,共阳为ca,共阴为cc),

//   所有8个数码管的段码引脚a,b,c,d,e,f,g,dp都是分别并联在一起,任何时候发送的段码均会传送到所有数码管上,所有的数码管的共阳极是独立的,

//   本例中个数码管的共阳极分别与8只NPN三极管射极相连,程序运行时,任意时刻仅允许一只数码管的共阳极连接+5V,当向连接段码的端口发送段码值时,相应数字只会显示在某一只数码管上。

//3、为了使不同数码管显示不同字符,本例使用的是集成式多位数码管常用的动态扫描显示技术,他利用了人的视觉暂留特征,选通第一只数码管时,发送1的段码;选通第二只数码管时,发送2的段码,...

//   每次仅选通一只数码管,发送相应的段码,每次切换选通下一数码管并发送相应段码的时间间隔非常短,视觉惰性使人感觉不到字符是一个接一个显示在不同的数码管上的,而会觉得所有的字符很稳定的同时显示在不同数码管上。

//   在控制两位数码管选通的时间间隔时,要注意全屏的扫描频率要高于视觉暂留频率16-20Hz。对于程序中的点亮一位数码管的延时时间,我们可以尝试将延时时间改为其他数值,观察会出现什么样的效果


#include <reg52.h>

#include <intrins.h>//C51内部移位函数

#define uchar unsigned char

#define uint  unsigned int

//7-seg数码管数组

uchar code DSY_CODE[11]=

{

  0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff

};//显示012345678


//1毫秒延时子程序

void DelayMS(uint x)

{

  uchar i;

while(x--)

{

for(i=120;i>0;i--);

}

}

//主程序

void main()

uchar i,k=0x80; //常量定义

P3 = 0xff;       //先关闭数码管

P2 = 0x00;       

while(1)//死循环

{

for(i=0;i<8;i++)

{

P2=0x00;//关闭显示

k=_crol_(k,1);//逐次循环左移

P2=k; //发送位码

P3=DSY_CODE[i+1];//发送数字段码

DelayMS(2); //延时

}

}

}


51单片机100例实例之07例的评论 (共 条)

分享到微博请遵守国家法律