我的也是,整了个之后,结果固定值的很亮,需要变化的就不行了, 相对较暗 |
lkc8210 发表于 2021-8-26 17:42 抱歉哈,我在练习源文件及分页子函数的编写,所以程序粘贴不全,下次一定改正 |
多谢各位大佬的指点,结合大家的意见,我缺少了P0口工作模式的设置,即P0M1=0x00;P0M0=0xff;然后再把原扫描时间的值改为500,就实现了稳定高亮的显示效果,![]() ![]() |
rayin 发表于 2021-8-27 08:52 软件上也可以修改。单独显示一个段的数码化。 你看看亮度就可以判断是不是应该驱动电路小了。如果不是 说明你的刷新率太快。 |
Q6,Q7,Q8,Q9输入PWM控制信号,就能无极调整亮度,呼吸灯效果都能做出来 |
开发板的P0口,都会有上拉电阻,所以够亮,你自己的电路一般不会加上拉电阻所以比较暗,建议,P0口设置成推挽模式,就是P0M1这个, 另外,P2.4~P2.7,其实没必要用三极管,直接接的IO口,低电平驱动即可,用了三极管还是NPN管,直接少了0.7V压差,如果你单片机电源是3.3V的话,数码管亮度就不够了。 |
这应该不是软件的问题,需要修改硬件。数码管用三极管驱动的电流更大一些,可以用三极管试试 |
调电流亮度变化不大,关键要买高亮数码管。 |
数码管得到的驱动电流不够大,需要加驱动IC。 |
源程序?main()函數都沒有 不要用delay()來延時,如:
|
ucmic 发表于 2021-8-26 16:44 往小了调,会更暗,往大了调,就闪烁了,这个值是相对理想的一个值了 |
2.软件的扫描时间适当修改。 |
1.硬件可以调整R16-R23 1K的几个电阻,阻值调小。 |
如果程序没有什么别的事要做,直接用延时就行,如果是初学者,没有必要把程序搞得太麻烦,等到你学会了,这种Delay()基本就可以不用在主函数中了输出端口要设定成强推挽输出,几个三极管是没有必要的,实际电路用20mA的驱动电流是完全足够的 这个是我的,参考一下,实际验证通过的 #include<REG52.h> sbit com0=P2^0; sbit com1=P2^1; sbit com2=P2^2; sbit com3=P2^3; //定义4个com端口 #define out P0 //p0 为显示 sfr P0M0=0x94; sfr P0M1=0x93; void delay(unsigned char i) { unsigned int k; for(i;i>0;i--) { for(k=0;k<600;k++); } } unsigned char ledtab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};// void main() { P0M0=0xff; P0M1=0x00; //设定P0端口为强推挽输出模式 while(1) { unsigned char k; while(1) { k=0; out=ledtab[k]; com0=0; delay(10); com0=1; k++; out=ledtab[k]; com1=0; delay(10); com1=1; k++; out=ledtab[k]; com2=0; delay(10); com2=1; k++; out=ledtab[k]; com3=0; delay(10); com3=1; } } } |