c语言六个数码管显示123456,用51单片机C语言编写程序实现6位共阴极数码管循环显示0123456789ABCDEF,六个数码管是连续不同的六个数?...

使用C语言编程,通过51单片机控制6个共阴极数码管循环显示0-9及字母,具体包括数码管段选和位选的代码实现,以及中断服务函数设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# include

# define uint unsigned int

# define uchar unsigned char

code uchar shu[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

/* 0    1    2 3  4   56 7*/

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管段选

/* 8   9a b  c   def*/

code uchar wen[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//数码管位选

uchar huancun[] = {0x00,0x00,0x00,0x00,0x00,0x00};//数码管段选缓存

sbit duan = P2^6;//段选

sbit wei = P2^7;//位选

void delay(uchar x)//延时函数

{

uchar i,j;

for(i = 0; i

for(j = 0; j<255; j--)

;

}

void xianshi() //显示函数

{

uchar i;

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

{

P0=wen[i];//位选

wei=1;//开锁存

wei=0;//关锁存

P0=huancun[i];//段选

duan=1;

duan=0;

P0=0xff;//消影

delay(5);

}

}

void init()

{

uchar i;

TMOD=0x01;

TH0=(65536-50000)/256;//10ms定时初值(T0计时用)

TL0=(65536-50000)%256;

TR0=1;//T0计时关断

ET0=1;//T0中断允许位关断

EA=1;//开总中断

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

{

huancun[i] = shu[i];//段选送缓存

}

}

void main()

{

init();

while(1)

{

xianshi();

}

}

void time_intt0 (void) interrupt 1//50ms中断

{

uchar t,i,j;

TH0=(65536-50000)/256;//重置初值

TL0=(65536-50000)%256;

t++;

if(t == 20)//1秒到 50ms*20 = 1s

{

t=0;

j++;//j+1

for(i = 0; i<6; i++)//使段选数据移位输入缓存

{

huancun[i] = shu[i+j];

}

if(j>9)//移到最后面 回到初始状态

{

j = 0;

}

}

}

照着你给你电路图写的,有问题请追问

温馨提示:答案为网友推荐,仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值