找到问题了,是板子的问题。板子上的控制寄存器的P34P35被短接了,拔掉短接片就OK了 |
tusanyou 发表于 2019-2-12 01:04 哈哈,595是不好用。不过我终于找到问题了,问题出在我的板子上。我的板子P3.4,P3.5管脚被短接了,把短接片拔掉就ok了。自己太粗心了哈哈 |
Nimaby 发表于 2019-1-31 16:40 595的问题!八个输出之间纯在击穿!595特别容易静电击穿!做了一个全彩光立方!开始采用的595!换的头痛!就放弃595了! |
wsxujn 发表于 2019-1-31 11:52 我也觉得是我硬件的问题。 |
和硬件电路有关,做一个产品,595做列驱动鬼影严重,换成138好了 |
ssk7793 发表于 2019-1-31 10:37 试过了,没用 |
调整延时时间试试 |
HC6800-ES-V2.0 发表于 2019-1-31 08:58 谢谢,这种我是晓得的。但是我的目的是要用的是板子上2个级联的595来驱动数码管。你第一个程序的消影方法我把他在我的程序里试过,没有效果,所以发论坛来了。 |
下面的程序,是你这个板子的资料,你看看吧! 程序一:不用译码器的 /******************************************************************************* * * 普中科技 -------------------------------------------------------------------------------- * 实 验 名 : 动态数码管显示试验 * 实验说明 : 8位数码管显示0~7 * 连接方式 : 见连接图 * 注 意 : *******************************************************************************/ #include<reg51.h> //--定义使用的IO口--// #define GPIO_DIG P0 //段选 #define GPIO_PLACE P1 //位选 //--定义全局变量--// unsigned char code DIG_PLACE[8] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制 查表的方法控制 unsigned char code DIG_CODE[17] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char DisplayData[8]; //用来存放要显示的8位数的值 //--声明全局函数--// void DigDisplay(); //动态显示函数 /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main(void) { unsigned char i; for(i=0; i<8; i++) { DisplayData[i] = DIG_CODE[i]; } while(1) { DigDisplay(); } } /******************************************************************************* * 函 数 名 : DigDisplay * 函数功能 : 使用数码管显示 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void DigDisplay() { unsigned char i; unsigned int j; for(i=0; i<8; i++) { GPIO_PLACE = DIG_PLACE[i]; //发送位选 GPIO_DIG = DisplayData[i]; //发送段码 j = 10; //扫描间隔时间设定 while(j--); GPIO_DIG = 0x00;//消隐 } } 程序二:用译码器的 /******************************************************************************* * * 普中科技 -------------------------------------------------------------------------------- * 实 验 名 : 动态数码管显示试验 * 实验说明 : 8位数码管显示0~7 * 连接方式 : 见连接图 * 注 意 : *******************************************************************************/ #include<reg51.h> //--定义使用的IO--// #define GPIO_DIG P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; //--定义全局变量--// unsigned char code DIG_CODE[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char DisplayData[8]; //用来存放要显示的8位数的值 //--声明全局函数--// void DigDisplay(); //动态显示函数 /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main(void) { unsigned char i; for(i=0;i<8;i++) { DisplayData[i]=DIG_CODE[i]; } while(1) { DigDisplay(); } } /******************************************************************************* * 函 数 名 : DigDisplay * 函数功能 : 使用数码管显示 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void DigDisplay() { unsigned char i; unsigned int j; 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位 } GPIO_DIG=DisplayData[i];//发送段码 j=10; //扫描间隔时间设定 while(j--); GPIO_DIG=0x00;//消隐 } } |
在切换扫描数据数据时,做到先关,再改数据,再开,就可以了。 |