[STC单片机] STC8F2K08S2使用中遇到的迷惑,求指点!

[复制链接]
3843|46
 楼主| chineseboyzxy 发表于 2020-11-22 13:38 来自手机 | 显示全部楼层 |阅读模式
很简单,做了一个电子表,入门级水平。P1直连4位共阴数码管A-G和秒点,是发光管正极,8个脚全设置成推挽输出。4个公共端直连单片机的另4个管脚,也全部设置为推挽输出。结果,数字能正常显示,只是P1.6连的D段特别亮,看了原理图和PCB图,找不到原因。因为是测试,程序中4个公共端的打开时间很短,所以显示的数字特别暗,唯独4个数字的D段很亮,基本达到正常工作的亮度。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ahongW 发表于 2020-11-22 18:31 | 显示全部楼层
加没加限流电阻?
bb688 发表于 2020-11-22 18:52 来自手机 | 显示全部楼层
程序问题,扫描要定时处理
jekey 发表于 2020-11-22 18:57 | 显示全部楼层
大概率软件原因
coody 发表于 2020-11-22 21:17 | 显示全部楼层
基本可以确定是软件群体,就算不加限流电阻,也不会这样。
最简单的办法,示波器看一下波形就知道了。
小小沙沙粒 发表于 2020-11-22 22:02 | 显示全部楼层
扫描时间不一样,D段时间停留最长就这样子显示了,应该用定时器来扫描,显示亮度就一致了
 楼主| chineseboyzxy 发表于 2020-11-22 22:10 来自手机 | 显示全部楼层
MOV  P1,A    所有笔段是同时赋值,不存在单独点亮的问题!
xyz549040622 发表于 2020-11-22 22:16 | 显示全部楼层
专业术语,应该是叫消隐吧。需要对数码管进行消隐,切换期间关闭一切输出。
 楼主| chineseboyzxy 发表于 2020-11-23 08:14 | 显示全部楼层
DISPLAY:
MOV DPTR,#TAB
MOV A,36H
MOVC A,@A+DPTR
MOV P1,A
CLR DIG1
CALL Delay
SETB DIG1
质疑程序有问题的看一下,简单到入门级、初学者的程序,有问题吗?
质疑电路有问题的,我再解释一下,单片机管脚和数码管直接连接,P1的8个脚直连A-G的7个段和秒点正极;另有4个管脚直连4个数字位的公共负极,秒点负极和第1个数字的公共负极共用。而且这些跟限流电阻没一毛钱关系。除了D段过亮,其它段显示都正常啊。。。。
bb688 发表于 2020-11-23 08:28 来自手机 | 显示全部楼层
把程序填全了,要不咋看?
ayb_ice 发表于 2020-11-23 08:30 | 显示全部楼层
需要加限流电阻,可能是某个IO电流输出太大,导致其它IO输出能力受影响了,时间长了芯片可能会挂的
chongdongchen 发表于 2020-11-23 08:41 | 显示全部楼层
你看下D有没有和VCC短路了,另外限流电阻还是别省了。
谭翬 发表于 2020-11-23 09:11 | 显示全部楼层
sbit L0=P2^0;
sbit L1=P2^1;
sbit L2=P2^2;
sbit L3=P2^3;
code uchar  ledasc[10]={  
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"};
delay(unsigned int i)
{
next:
if(i!=0){_nop_();_nop_();goto next;}
}
uchar disbuf[4];
unsigned int js=0;
mian()
{
unsigned int i=0;
//P1 口为强推输出
//P2 口为普通输入输出
L0=1;L1=1;L2=1;L3=1;
start:
         disbuf[0]=js%10;
         disbuf[1]=js/10%10;
         disbuf[2]=js/100%10;
         disbuf[3]=js/1000%10;
         P1=ledasc[disbuf[0]];L0=0;delay(100);L0=1;
         P1=ledasc[disbuf[1]];L1=0;delay(100);L1=1;
         P1=ledasc[disbuf[2]];L2=0;delay(100);L2=1;
         P1=ledasc[disbuf[3]];L3=0;delay(100);L3=1;
         i++;if(i>99){i=0;js++;}
         if(js>9999){js=0;}
        goto start;
}
谭翬 发表于 2020-11-23 09:12 | 显示全部楼层
//
delay(unsigned int i)
{
next:
if(i!=0){i--;_nop_();_nop_();goto next;}
}
谭翬 发表于 2020-11-23 09:18 | 显示全部楼层
1、推挽输出最大电流最大20mA,可以不用限流电阻;
2、P1口全部输出1时,会出现各段亮度不一;
3、采用段扫描可以解决:
谭翬 发表于 2020-11-23 09:23 | 显示全部楼层
  段扫描方法:
         P1=ledasc[disbuf[0]]&0xf0;L0=0;delay(50);P1=ledasc[disbuf[0]]&0x0f;delay(50);L0=1;
         P1=ledasc[disbuf[1]]&0xf0;L1=0;delay(50);P1=ledasc[disbuf[1]]&0x0f;delay(50);L1=1;
         P1=ledasc[disbuf[2]]&0xf0;L2=0;delay(50);P1=ledasc[disbuf[2]]&0x0f;delay(50);L2=1;
         P1=ledasc[disbuf[3]]&0xf0;L3=0;delay(50);P1=ledasc[disbuf[3]]&0x0f;delay(50);L3=1;
ahongW 发表于 2020-11-23 09:28 | 显示全部楼层
chineseboyzxy 发表于 2020-11-23 08:14
DISPLAY:
MOV DPTR,#TAB
MOV A,36H

8个LED全加上限流电阻,你就知道与限流电阻有没有关系了
laocuo1142 发表于 2020-11-23 11:41 | 显示全部楼层
应该是显示延时时间不够
bb688 发表于 2020-11-23 12:21 来自手机 | 显示全部楼层
这个逗比没用定时中断,在主程序里扫的
 楼主| chineseboyzxy 发表于 2020-11-23 12:40 | 显示全部楼层
bb688 发表于 2020-11-23 12:21
这个逗比没用定时中断,在主程序里扫的

SB人物,以后说话文明点儿,说脏话生孩子没屁眼儿的。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

1056

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部