led数码管显示程序

led数码管显示程序,第1张

#include"at89x51.h"

#define uchar unsigned char

#define uint unsigned int

/************************* 全局变量定义部分 **************************/

//硬件设计接口不同,要修改下一行

uchar code acLEDCS[]={0x7f,0xbf,0xdf,0xed}/* 位选地址码,“0”有效,位选接的是P2口高4位 */

uchar code acLedSegCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c}/* 段码 */

uchar acLED[4] /* 显示缓冲区 */

char cScanIndex /* 位选指针0~3 */

uint t=0

/************************* 数码管显示函数 ***************************/

void Display(void)

{

// 添加要显示的数据(变量)

acLED[3]=acLedSegCode[t/1000]/* LED显示第1位 */

acLED[2]=acLedSegCode[t%1000/100]/* LED显示第2位 */

acLED[1]=acLedSegCode[t%100/10]/* LED显示第3位 */

acLED[0]=acLedSegCode[t%10]/* LED显示第4位 */

}

/************************** 主函数 *****************************/

void main(void)

{

/**************** 定时器初始化 *******************/

TMOD= 0x02 /* 定义定时器0工作于方式2(8位自动重装) */

TH0 = -200 /* 8位自动重装定时器约每100uS中断1次,9216次为1秒 */

TL0 = -200

TR0 = 1

ET0 = 1

EA = 1/* 开总中断 */

while(1)

{

Display()

}

}

void IntT0(void) interrupt 1/* 定时器0中断,完成1秒定时和LED延时 */

{

t++

if(t==10000)

t=0

P0 = 0 /* 先清显示再换位选 */

P2 = acLEDCS[cScanIndex] /* 送位选数据 */

P0 = acLED[cScanIndex++] /* 送显示数据,位选指针移位 */

cScanIndex &= 3 /* 位选指针回位 */

}

首先你的仔细看看电路图,看一下数码管是怎么接的,接的是哪一个管脚,从而确定出位选和段选。所谓段选指的是数码管显示的内容,位选指的是哪几个数码管显示。总之你一定要学会看懂电路图。下面我给你一个例子啊,是根据我的电路板写的。

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

sbit dula = P2^6//段选决定显示什么内容

sbit wela = P2^7//位选决定显示哪几个数码管

sbit d1 = P1^0//流水灯

uchar num

//段码表

uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f,

0x66, 0x6d, 0x7d, 0x07,

0x7f, 0x6f, 0x77, 0x7c,

0x39, 0x5e, 0x79, 0x71}

void delay(uint z)

void main()

{

wela = 1

P0 = 0xc0

wela = 0

while(1)

{

//显示0~F

for(num=0num<16num++)

{

dula = 1

P0 = table[num]

dula = 0

delay(1000)

}

}

}

//延时函数

void delay(uint z)

{

uint x, y

for(x=zx>0x--)

for(y=110y>0y--)

}

#include<reg51.h>

#define uchar unsigned char

uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}//0-9

uchar time,scanled,tiao

uchar disdat[6]="201803"

void delay(unsigned int x)

{

unsigned int i,j

for(i=0i<xi++)

for(j=0j<120j++)

}

void t0isr() interrupt 1 //秒计时

{

TH0=0x3c

TL0=0xb0

time++

if(time==20)

{

time=0

tiao++

tiao%=10

}

}

void t1isr() interrupt 3 //显示

{

TH1=0xec

TL1=0x78

P2=1<<scanled

P0=~ledtab[tiao]

scanled++

scanled%=4

}

main()

{

TMOD=0x11

TH0=0x3c

TL0=0xb0

TH1=0xec

TL1=0x78

TR1=1

TR0=1

ET0=1

ET1=1

EA=1

while(1)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7789744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存