#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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)