导航:首页 > 编程语言 > 六位数码管程序

六位数码管程序

发布时间:2023-03-26 22:46:58

『壹』 一段数码管动态显示一行六位数字的程序,求解析所有代码含义。越详细越好

;这个程序的基本流程是:
;1.把content中的数字对应的断码找出,并依次存放到LEDBuf中
;2.依次送LEDBuf中的断码到LED上,LED显示对应字符

OUTBIT equ 08002h ;将位码送至此地址,位码表示显示哪一位LED管
OUTSEG equ 08004h ;将断码送至此地址,断码表示在指定的LED管上显示什么字符

data segment
Content db 1,2,3,0dh,0eh,0fh ;要显示的数字
LEDBuf db 6 p(?) ;要显示的数字对应的断码

;LEDMAP给出的是断码表,表示16进制数到断码的映射。总共16个,分别表示0-f。
;比如第一个3fh就是0的断码,断码送到LED中,LED会自动显示0。
LEDMAP:
db 3fh,06h,5bh,4fh,66h,6dh,7dh,,07h
db 7fh,6fh,77h,7ch,39h,5eh, 79h,71h
data ends
code segment
assume cs:code, ds:data

;Delay的目的就是为了让LED灯上的内容停留,以便看清
Delay proc
push cx
mov cx,100h
loop $ ;这里的循环目的是暂停一段时间,让LED上的数字停留,以便人看清
pop cx
ret
Delay endp

;DisplayLED做的事:把LEDbuf中内容全部显示到LED灯上。LEDbuf中6个断码,对应6个LED灯。
DisplayLED proc near
mov bx, offset LEDBuf
mov cx, 6 ;总共显示6个断码
mov ah, 00100000b ;位码,00100000b中1的位置指示了要显示的数位,当前是1在左起第六个,也就是显示6号LED灯
;后面有shr指令会将这个00100000b右移,这样变成00010000,显示5号LED,以此类推。

DLoop: mov dx, OUTBIT
mov al, 0
out dx,al ;将0送端位码端口,表示当前不选中任何LED,即关闭LED

mov al, [bx] ;将LEDbuf中的一个断码,送入al
mov dx, OUTSEG
out dx,al ;送断码,表示要在LED中显示这个字符

mov dx, OUTBIT
mov al, ah
out dx, al ;送位码,表示要显示哪一个LED灯

call Delay ;上面送完断码,位码后,在相应的LED上就显示相应的字符,Delay可以让这个字符停留一段时间,视觉滞留。
shr ah, 1 ;位码右移,显示下一个LED
inc bx ;bx加1,那么[bx]就指向LEDbuf中的下一个断码
loop Dloop ;这个Dloop循环把LEDbuf中的六个断码依次全部送到对应LED上显示
ret
DisplayLED endp

;Start:程序的入口,从这里开始运行程序
Start proc near
mov ax, data
mov ds, ax
mov cx,6 ;显示六个字符
mov ah,0 ;ah是content中的偏移量,从0->5,分别找出content中各个字节内容
mov si,offset ledbuf

redo: mov bx,offset content
mov al,ah ;后面的xlat指令要使用al
xlat ;xlat的作用al<-[bx+al],也就是将bx这个地址(content)起的第al个字节内容送到al中
mov bx,offset ledmap
xlat ;将此时al中的数字对应的断码找出,并放到al中。(数字a对应的断码就是ledmap起第a个字节的数据)
mov [si],al ;将找到的断码放到LEDbuf中
inc si ;LEDbuf地址加1,存放下一个断码
inc ah ;找content中下一个数字的断码
loop redo ;整个redo循环做的事:把content中数字对应的断码放到LEDbuf中,循环最后结果是LEDbuf变成:06h,5bh,4fh,5eh,79h,71h
show: call displayled
jmp show ;在LED上一直显示这6个字符
start endp
code ends
end start

『贰』 51单片机共阴数码管利用静态显示,让六个数码管显示1~6,程序怎么写

代码如下:

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

#define data P0 //P0口宏定义

/* ***************************************************** */

// 数码管位选数组定义

/* ***************************************************** */

uchar code leddata[] =

{ 0x3F, //"0"

0x06, //"1"

0x5B, //"2"

0x4F, //"3"

0x66, //"4"

0x6D, //"5"

0x7D, //"6"

0x07, //"7"

0x7F, //"8"

0x6F, //"9"

0x77, //"A"

0x7C, //"B"

0x39, //"C"

0x5E, //"D"

0x79, //"E"

0x71, //"F"

0x76, //"H"

0x38, //"L"

0x37, //"n"

0x3E, //"u"

0x73, //"P"

0x5C, //"o"

0x40, //"-"

0x00, //熄灭

0x00 //自定义};

};

/* ***************************************************** */

// 位定义

/* ***************************************************** */

sbit = P1^7; //段选定义

sbit we = P1^6; //位选定义

/* ***************************************************** */

// 函数名称:DelayMS()

// 函数功能:毫秒延时

// 入口参数:延时毫秒数(ValMS)

// 出口参数:无

/* ***************************************************** */

void delay(uint z)

{

uint x,y;

for(x = 0; x < z; x++)

for(y = 0; y < 113; y++);

}

/* ***************************************************** */

// 函数名称:main()

// 函数功能:数码管静态显示

// 入口参数:无

// 出口参数:无

/* ***************************************************** */

void main(void)

{

uchar i;

we = 1;//位选开

data = 0x00;//送入位选数据

we = 0;//位选关

while(1)

{

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

 {

 = 1; //段选开

data = leddata[i]; //送入段选数据

 = 0; //段选关

 delay(500); //延时

 }

}

}

(2)六位数码管程序扩展阅读

对于74HC573,形象一点,我们只需要将其理解为一扇大门,只不过这扇大门是单向的,其中11引脚(LE)控制着门的开、关状态,高电平为大门打开,低电平为大门关闭。

D0-D7为输入,Q0-Q7为输出,在LE = 1,即输入高电平时,输入端=输出端,输入是什么,输出也就原封不动的输出;在LE = 0 ,即输入高电平时,大门关闭,实现锁存,不再输出。了解之后,我们按照电路图,来进行编程,代码实现。

在实现数码管的静态显示中,用到了两个锁存器,两个I/O口,P1.6和P1.7,分别是位选和段选。

首先定义了个数码管位选数组,也就是十六进制代码,这便是后来数码管显示数字的核心,接着,用 sbit 定义了位选和段选端口,分别是 P1.6 和 P1.7 ,定义了一个延时函数,其实这一串代码很有意思,开关开关思想,贯穿始终。

首先把位选打开,送入位选数据后,关闭锁存器,实现锁存,进入循环,随之打开段选锁存器,送入段选数据后,再次关闭段选。

接下来,这个延时操作对于实际看到数码管的显示效果特别重要,因为程序在段选后之后,会马上消隐,显示的时间之后几个微秒,这显然不太合理,需要在关闭段选后加上延时,这样一来,才会让每位数码管亮度保持均匀。

『叁』 单片机6位数码管计数器程序问题

#include<reg52.H>//STC头文件
#defineucharunsignedchar
#defineuintunsignedint
#definetimewe3

sbitwe=P2^7;
sbit=P2^6;

unsignedlongtemp;
uintjsms=0;

ucharcodean[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
ucharcodewei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

voiddelay(uinta)//1ms延时程序(12MHz10倍于51单片机速度时)
{
uinti;
while(--a!=0)
{
for(i=0;i<600;i++);
}
}

uchardisbuf[6];
voiddisplay()
{ ucharcodewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
staticuchara;
if(a>=6)a=0;
we=1;
P0=0xff;
we=0;
=1;
P0=an[disbuf[a]];
=0;
we=1;
P0=wei[a];
we=0;
a++;
}
/**********************************************/
/*主函数*/
/**********************************************/
voidmain(void)
{
temp=0;
while(1)
{
if(++jsms>=1000){
if(++temp==999999)
temp=0;
}

disbuf[0]=temp/100000;
disbuf[1]=temp%100000/10000;
disbuf[2]=temp%10000/1000;
disbuf[3]=temp%1000/100;
disbuf[4]=temp%100/10;
disbuf[5]=temp%10;
display();
delay(1);
}
}

『肆』 6位数码管动态显示,单片机直接片选,先显示201903,再显示abcdef,再显示123456,用C语言编程

8位数码管动态显示,单片机直接片选,先显示201903,再显示abcdef,再显示123456,用C语言编程 ,重复循环,仿真试试。

#include<reg51.h>

#define uchar unsigned char

// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f

unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

void delay(uchar z)

{

uchar i,j;

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

for(j=0;j<z;j++);

}

void main()

{

uchar k;

while(1)

{

for(k=0;k<50;k++)

{

P0=0xff;

P2=LED7Code[0];

P0=0xfe;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xfd;

delay(5);

P0=0xff;

P2=LED7Code[2];

P0=0xfb;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xf7;

delay(5);

P0=0xff;

P2=LED7Code[1];

P0=0xef;

delay(5);

P0=0xff;

P2=LED7Code[9];

P0=0xdf;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xbf;

delay(5);

P0=0xff;

P2=LED7Code[3];

P0=0x7f;

delay(5);

}

for(k=0;k<50;k++)

{

P0=0xff;

P2=LED7Code[0];

P0=0xfe;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xfd;

delay(5);

P0=0xff;

P2=LED7Code[10];

P0=0xfb;

delay(5);

P0=0xff;

P2=LED7Code[11];

P0=0xf7;

delay(5);

P0=0xff;

P2=LED7Code[12];

P0=0xef;

delay(5);

P0=0xff;

P2=LED7Code[13];

P0=0xdf;

delay(5);

P0=0xff;

P2=LED7Code[14];

P0=0xbf;

delay(5);

P0=0xff;

P2=LED7Code[15];

P0=0x7f;

delay(5);

}

for(k=0;k<50;k++)

{

P0=0xff;

P2=LED7Code[0];

P0=0xfe;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xfd;

delay(5);

P0=0xff;

P2=LED7Code[1];

P0=0xfb;

delay(5);

P0=0xff;

P2=LED7Code[2];

P0=0xf7;

delay(5);

P0=0xff;

P2=LED7Code[3];

P0=0xef;

delay(5);

P0=0xff;

P2=LED7Code[4];

P0=0xdf;

delay(5);

P0=0xff;

P2=LED7Code[5];

P0=0xbf;

delay(5);

P0=0xff;

P2=LED7Code[6];

P0=0x7f;

delay(5);

}

}

}

『伍』 单片机89c51一个6位LED数码管显示功能 程序,希望能准确点的程序,只显示6位数字就好。

#include <reg51.h>
#include <intrins.h>

void delay(unsigned int i); //函数声名

char DelayCNT;//定义变量

//此表为 LED 的字模, 共阴数码管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制

//此表为8个数码管位选控制, 共阴数码管 1-8个 -
unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制 查表的方法控制

/************主函数**********************/
main()
{
unsigned int i,LedNumVal=1 ; //变量定义
unsigned int LedOut[10]; //变量定义

DelayCNT=0;

while(1)
{
if(++DelayCNT>=20) //控制数字变化速度
{
DelayCNT=0; //20个扫描周期清零一次
++LedNumVal; //每隔20个扫描周期加一次
}

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];

LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位
LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点
LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位
LedOut[7]=Disp_Tab[LedNumVal%10]; //个位

for( i=0; i<9; i++)
{
P0 = LedOut[i];
P1 = dispbit[i]; //使用查表法进行位选

/* switch(i) //使用switch 语句控制位选
{
case 0:P1 = 0x7F; break;
case 1:P1 = 0xbF; break;
case 2:P1 = 0xdF; break;
case 3:P1 = 0xeF; break;
case 4:P1 = 0xf7; break;
case 5:P1 = 0xfb; break;
case 6:P1 = 0xfd; break;
case 7:P1 = 0xfe; break;

} */

delay(150); //扫描间隔时间 太长会数码管会有闪烁感
}

}
}

void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}

阅读全文

与六位数码管程序相关的资料

热点内容
u盘文件给删了 浏览:737
vuejsoauth2 浏览:78
2017微信支付日 浏览:81
机械臂编程如何开发 浏览:21
标书U盘PDF文件要不要签字 浏览:222
ps软件文件复制到d盘 浏览:148
一般工业固废招标文件内容 浏览:583
网站建设报价怎么算 浏览:66
三星a7000升级安卓502 浏览:486
word2010清除分隔符 浏览:781
乐视怎么切换网络 浏览:425
cad打印pdf文件名称与cad不一致 浏览:815
电气与可编程控制是什么 浏览:67
文件名中允许使用英文竖线吗 浏览:531
编程猫在哪里 浏览:775
win8共享文件夹访问权限 浏览:380
cad文件显示为只读不能保存怎么办 浏览:703
如何在系统里忘记网络 浏览:24
中小企业出口数据在哪里找 浏览:715
win8和xp传文件 浏览:75

友情链接