51单片机如何控制八个数码管,进行动态扫描

用51单片机八位共阴极数码管三极管,设计单片机动态扫描显示系统,八位数码管稳定同时显示1-8数字。~

#include

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void show();
void delay();

void main()
{
while(1)
show();
}

void show()
{
unsigned char i;
for(i=0;i<8;++i)
{
P0=table[i+1];
P2=~(0x01<<i);
delay();
P2=0xFF;
}
}

void delay()
{
int i=100;
while(i--);
}

额 你应该认真看看数码管动态扫描的原理,
前提:必须能静态的显示,
动态显示的关键是数码管的位选口,静态显示的时候几个数码管的位选线的电平是一样的,
而动态显示的时候位选线同一时间只有一个能使数码管点亮,人看到的几个数码管显示不一样是因为人眼的视觉滞留效果,你可以点亮一个数码管后延时的时间长一点,你会看到其实一次只有一个数码管被点亮

动态扫描就是给各个数码管依次显示,任意时间只有一个数码管亮,但闪烁的太快了,人眼分辨不出,给人的感觉就是每个数码管都在亮。一般过程就是赋值,开显示,延时,关显示,这是我以前写过的程序
#include <REGX52.H>
main()
{unsigned int i;
while(1)
{P0=0x3f;//个位赋值
P1_0=0;//开显示
for(i=0;i<2;i++);//延时
P1_0=1;//关显示

P0=0x6;//十位
P1_1=0;
for(i=0;i<2;i++);
P1_1=1;

P0=0x5b;//百位
P1_2=0;
for(i=0;i<2;i++);
P1_2=1;

P0=0x4f;//千位
P1_3=0;
for(i=0;i<2;i++);
P1_3=1;}
}
这个是4位数码管,P0口接赋值端,P1口低四位接4个数码管的选通端,你要八个的话就把P1口的高四位再接到另外四个数码管的片选端,程序仿照就可以了

;以下是共阳数码管简单程序;
p0口接abcdefg,P2口接s0,s1,s2......s7;
软件靠自己啦
如:main:mov r1,#8;
mov r0,#00h;
mov r2,#0feh;
loop:mov p0,r0;送显示数据
inc r0;
mov p2,r2;选通要显示的数码管
lcall delay;
mov a,r2;
rl a;
mov r2,a;
djnz r1,loop;
ajmp main;
delay:mov r7,#245;延时大约1ms
djnz r7,$;
ret

方法:
p0口各串一只1K电阻,控制8只PNP管作八个共阳数码管驱动(向8只共阳数码管供电),用p1口作段驱动(吸流),......软件会写吧!

外接74系列驱动电路就行,比如74LS164或74LS138。

51单片机如何控制八个数码管,进行动态扫描
答:这个是4位数码管,P0口接赋值端,P1口低四位接4个数码管的选通端,你要八个的话就把P1口的高四位再接到另外四个数码管的片选端,程序仿照就可以了

在51单片机中用c语言写程序实现用一个按键控制8个灯的亮和灭(按下按 ...
答:你首先要确定你的电路。选择什么单片机和数码管,8个按键最简单8个IO口控制。一般简单的是用三极管驱动数码管。如果你会C语言的话,很容易上手。自己先从控制1个数码管学,在控制2个数码管(2个数码管基本上可以完成上面试验,8个就可以类推)\r\n\r\n1、初始值为0:上电复位后,单片机驱动数码管显...

51单片机控制8个数码管并显示1-8
答:数码管段选连接到单片机P0口,位选连接到P2口 ORG 0000h MAIN:CALL DISPLAY AJMP MAIN DISPLAY:MOV R0,#0 MOV R1,#0x01 MOV DPTR,#TAB LOOP:INC R0 MOV A,R0 MOVC A,@A+DPTR MOV P0,#0 ;消隐 MOV P0,A ;送段码 CALL DELAY MOV A,R1 ;送位码 RL A ;移位 MOV P2,A MOV ...

proteus8位数码管和51芯片怎么接
答:proteus8位数码管和51芯片接的方法:1、首先,确定您使用的是通用型I/O口驱动的8位数码管,该数码管需要连续的8个I/O口来控制。例如,可以使用P2口(P2、0~P2、7)来控制。2、将数码管的8个引脚分别连接到51单片机的P2、0~P2、7引脚,确保引脚与引脚之间的连接是正确的、稳定的。3、在Proteus中...

如何使用单片机at89c51驱动4位8段数码管,如果用到芯片来驱动的,电路...
答:图我传的这个图 六位数码管虽然是共阴极的 (但是不影响原理)因为他接在51单片机的三态接口上 只需接上拉电阻 (排阻)即可 。这种电路图用两个锁存器U1,U2分别控制数码管的位选和片选信号 (在读中标的WEI1-WEI6是位选信号,a-g等是段选信号)。锁存器U2,U1是同型号的 用图中的wela 和...

51单片机驱动八位数码管电子钟
答:P2=0X00; //八个数码管显示全为0 TR0=0;TR1=0;while(1){ gongzuo();} } void delay(uint z)//延时程序 { uint i,j;for (i=z;i>0;i--)for (j=110;j>0;j--);} void display1() //P2为位选,P0为段选,显示格式为 23小时59分59.99秒 { uchar s,g;s=shi/10;g=...

请帮忙,这是运用51单片机实现4位8段LED数码管的动态数字显示的c语音程 ...
答:include<reg52.h> define uchar unsigned char//宏定义 define uint unsigned int uchar count;uint disnum;sbit dula=P2^6;sbit wela=P2^7;uchar code tabledu[]={//段码表 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void display(...

利用51单片机驱动一个8段数码管,实现0—F计数
答:设置一个数码管段位表ledtable,共16个,值就是共阴8 段(含小数点)数码管的段码。 8 段从上面一横开始顺时针依次为a、b、c、d、e、f、g(中间的横)和h(小数点),分别接在单片机IO口的0~7 ,例如要显示0,则段码为0011 1111 即0x3f 。 其它,你可自行推出。程序上实现:ORG 0000H...

用51单片机控制数码管显示
答:2. 接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF 3. 接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理 4. 接配置:EA(PIN31)。说明原因。发光二极的控制:单片机I/O输出 将一发光二极管LED的正极(阳极)接P1.1,LED...

基于51单片机利用八个数码管花样显示如下
答:其实很简单,你把1--8对应的共阴极或共阳极的编码寻在一个数组里(C语言)或者表里(汇编语言查表法),在P0口和P2口接上8个7段数码管,P2口做位选,P0口做段选,每次从表中查询你要显示的数据的编码写到P0口,再把你要在哪一个数码管上显示写到P2口(比如位选为低电平有效,向P2口写入0xFE...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网