本帖最后由 吱吱 于 2021-4-9 21:57 编辑
萌新求助 学习的是普中51单片机A6板子
教程视频中的 动态数码管章节 的课后作业 :动态数码管显示0~7
程序如下文所示,发现问题:数码管第0位显示数字8,即(8 1 2 3 4 5 6 7 )而非0~7
可以确定的是:
1.板子上数码管的第0位是可以正常显示数字0的(使用该章节教程实验程序验证)
2.该程序的位选没问题
3.除第0位的其他1~7位的数码管可以正常显示
4.将第0位要显示的数字由0改为1后,发现仍然显示数字8,但该位的8段数码管中,其中表示数字1的两段数码管
明显比其他5段数码管要亮
5.接线未发现问题
程序代码如下:
#include"reg52.h"
#include"intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit RC=P3^0; //控制595芯片 串转并扩展接口
sbit SC=P3^1;
sbit SE=P3^2;
u8 code smgduan[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07}; //数字0~7
u8 code duanxuan[8]={0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0}; //位选控制
void delay(u16 i) //延时函数
{
while(i--);
}
void read74HC595(u8 i) //读595芯片8位并口输出数据
{
u8 a;
RC=1,SC=1;
for(a=0;a<8;a++)
{
SE=i>>7;
i<<=1;
SC=0;
_nop_();
_nop_();
SC=1;
}
RC=0;
_nop_();
_nop_();
RC=1;
}
void main()
{
u8 i;
while(1)
{
for(i=0;i<8;i++)
{
read74HC595(duanxuan); //数码管位选控制
P0=smgduan; //数码管数字显示
delay(100); //延时
read74HC595(0x00); //消隐
}
}
}
|