遇到厂家售后了![]() |
wulin 发表于 2020-7-30 17:25 真厉害,确实是跳帽接错了!十分感谢!!! |
myshadow 发表于 2020-7-30 16:39 给你把程序修改了一下,用极低速扫描数码管,借此有可能发现硬件故障点。怀疑是J21跳线帽接触不良或虚焊,导致U2 74HC573工作不稳定。
|
robinsonlin 发表于 2020-7-30 16:36 我用的是普中开发板,程序下载到板子后运行正确,但是关机复位重启后有时会出现乱码的现象。 我已经在main函数中,初始化了IO口, P0=0x00;P2=0x00;还是不管用! |
wulin 发表于 2020-7-30 04:57 复位以后会出现数码管会发生变化,乱码,非常怪,都找不到原因 |
每次都在那个位置上出错么? 看看这个板子上 P0^5脚有没有被别的功能复用了。 |
1692483014 发表于 2020-7-29 22:25 大佬,这个P0M0这个是什么意思? 是指P0口吗? 后面跟的 M0 M1 是什么? |
带电重启不正常时, 断电再上电试试,还不正常时, 断电放电再上电试试,还不正常时, 摔两下敲两下吹两下擦两下,还不正常时, 烧香拜佛。 言归正传,顶6楼 另外有可能是 P0总线上连接的其它设备影响 注意,传统51,P0口做总线(地址/数据)时,是推挽输出,但做普通IO时,是漏极开路输出的,就是本例的情况,这时,输出高电平需要靠外接上拉电阻。 |
看看板子后面的焊点有没有粘连在一起的,这种板子焊接经常有这毛病处理一下就好了 |
程序没有任何问题,有可能硬件有问题。按下复位按键或断电时间长一些试试。 |
尝试在main函数最开始的地方添加io初始化: P0M0 = 0x00; P0M1 = 0xFF; P2M0 = 0x00; P2M1 = 0x1C; |
man1234567 发表于 2020-7-29 21:25 就这一个板子啊,没有其他的了。我用的代码完全复制普中官方的代码,什么也没有改。 网上说是要 初始化数码管,不知道要怎么初始化? |
同样的程序换个板试试,就是把单片机拔下来放在其他板上试试就知道。 |
/************************************************************************************** * 动态数码管显示实验 * 实现现象:下载程序后数码管从右至左显示0-7。 注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值 /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : DigDisplay * 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示 *******************************************************************************/ void DigDisplay() { u8 i=0; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } P0=smgduan[i];//发送段码 delay(100); //间隔一段时间扫描 P0=0x00;//消隐 } } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { while(1) { DigDisplay(); //数码管显示函数 } } |