4个回答
展开全部
单片机 数码管 扫描显示 用少量的 IO 口完成多位数码管扫描显示,一般在程序中需要加入
显示消隐,即在 先关闭 数码管 再写入段码 接着写入 位选码,
电路图片 传不上
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0 = P3^2;
sbit led1 = P3^3;
sbit led2 = P3^4;
sbit led3 = P3^5;
void main(void)
{
P1 = 0xff;
TMOD = 0x21;
TH1 = 0xfa;
TL1 = 0xfa;
TH0 = 0xdc; //11.0592晶振 10ms
TL0 = 0x00;
SCON = 0x40;
PCON = 0x00;
IE = 0x8a;
while(1)
{
TR0 = 1;
}
}
void Timer0(void) interrupt 1 // T0 中断 1 ( INT0 中断 0 )
{
uchar a;
TH0 = 0xdc;
TL0 = 0x00;
P3 |= 0x3c; // P3 或 3CH 显示消隐
a++;
if(a==1)
{
P1 = 0x3f; // 显示 0
P3 ^= 0x04;
}
if(a==2)
{
P1 = 0x06; // 显示 1
P3 ^= 0x08;
}
if(a==3)
{
P1 = 0x5b; // 显示 2
P3 ^= 0x10;
}
if(a==4)
{
a=0;
P1 = 0x4f; // 显示 3
P3 ^= 0x20;
}
}
显示消隐,即在 先关闭 数码管 再写入段码 接着写入 位选码,
电路图片 传不上
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0 = P3^2;
sbit led1 = P3^3;
sbit led2 = P3^4;
sbit led3 = P3^5;
void main(void)
{
P1 = 0xff;
TMOD = 0x21;
TH1 = 0xfa;
TL1 = 0xfa;
TH0 = 0xdc; //11.0592晶振 10ms
TL0 = 0x00;
SCON = 0x40;
PCON = 0x00;
IE = 0x8a;
while(1)
{
TR0 = 1;
}
}
void Timer0(void) interrupt 1 // T0 中断 1 ( INT0 中断 0 )
{
uchar a;
TH0 = 0xdc;
TL0 = 0x00;
P3 |= 0x3c; // P3 或 3CH 显示消隐
a++;
if(a==1)
{
P1 = 0x3f; // 显示 0
P3 ^= 0x04;
}
if(a==2)
{
P1 = 0x06; // 显示 1
P3 ^= 0x08;
}
if(a==3)
{
P1 = 0x5b; // 显示 2
P3 ^= 0x10;
}
if(a==4)
{
a=0;
P1 = 0x4f; // 显示 3
P3 ^= 0x20;
}
}
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
在每次送完段选数据后,在送入位选数据之前,需要加上一句“P0=0xff;”,这条语句就是“消影”。
写个片段:
dula=1;
P0=table[1];
dula=0;
P0=0xff;//送位选数据前关闭所有显示
wela=1;
P0=0xfe;
wela=0;
delayms(10);
(对共阳极数码管)
写个片段:
dula=1;
P0=table[1];
dula=0;
P0=0xff;//送位选数据前关闭所有显示
wela=1;
P0=0xfe;
wela=0;
delayms(10);
(对共阳极数码管)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以清数据,也可以清位选,你看差办
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以用芯片74HC245,还有一些有消隐引脚的数字芯片,可以上网查查
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询