[技术问答] N76E003驱动TM1640显示停不住

[复制链接]
3828|12
 楼主| 175192387 发表于 2017-12-24 18:05 | 显示全部楼层 |阅读模式
本帖最后由 175192387 于 2017-12-24 18:14 编辑

程序是以前STC15上用的,都没什么问题,移植过来就不行,断点显示的时候能显示全部,告诉运行就只显示一个数字 了,而且很暗。
  1. uchar j;
  2.          
  3.                 start();
  4.                 send_data(writedatamode_z);                          //自动地址
  5.                 stop();
  6.                
  7.                 start();
  8.                 send_data(startdata);                           //起始地址
  9.                  for(j=0;j<13;j++)                                    //送16位数
  10.                 {
  11.                          send_data(num[j]);
  12.                         
  13.                 }  
  14.                 stop();


  15.                 start();
  16.                 send_data(display);                          //开显示
  17.                 stop();        
QQ图片20171224180935.jpg
QQ图片20171224181250.jpg

断点打的位置

断点打的位置
 楼主| 175192387 发表于 2017-12-24 18:06 | 显示全部楼层
  1. /*命令说明*/                                       
  2. #define writedatamode_z  0x40   // 采用自动地址加一方式写显示缓存
  3. #define writedatamode_g  0x44   //采用地址固定模式写缓存
  4. #define readkeymode  0x42       //  键盘扫描模式
  5. #define        startdata  0xc0                 //起始地址
  6. #define display   0x8c          //开启显示 亮度用后三位决定
  7. #define closedis   0x80         //关显示

  8. sbit SCLK=P0^7;
  9. sbit DIO =P0^6;

  10. uint code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  11.                        0x7f,0x6f,0x77,0x7C,0x58,0x5E,0x79,0x71};                                                                                                                                                                                                       
  12. void start()                   //开始条件
  13. {
  14.           SCLK=1;
  15.         DIO=1;
  16.         DIO=0;
  17.         SCLK=0;               
  18. }

  19. void send_data(uchar x)                  //送数据        低位先传
  20. {
  21.         uchar  i;
  22.         for(i=0;i<8;i++)
  23.         {
  24.                 SCLK=0;
  25.                 DIO=(bit)(x&0x01);
  26.                 SCLK=1;
  27.                 x>>=1;
  28.         }
  29.         SCLK=0;
  30. }
  31. void stop()                                         //结束条件
  32. {
  33.         SCLK=0;
  34.         DIO=0;
  35.         SCLK=1;
  36.         DIO=1;
  37. }
xinxianshi 发表于 2017-12-24 19:09 | 显示全部楼层
应该是延时出的问题,这个单片机的时钟速度可能跟你之前的是不同的。
 楼主| 175192387 发表于 2017-12-24 21:41 | 显示全部楼层
是哪里的延时,这个程序是没什么延时,时序感觉是没什么问题
huangcunxiake 发表于 2017-12-24 22:13 | 显示全部楼层
我用过MAX7219,也是按照时序,一次点亮。
zhuomuniao110 发表于 2017-12-25 12:40 | 显示全部楼层
如果是通信接口那种,应该不会影响这个显示啊?你这样,别修改,只让显示一个固定的值看看。
lewhile 发表于 2019-2-16 21:31 | 显示全部楼层
楼主怎么解决的,我遇到无法驱动的问题,
643757107 发表于 2019-2-16 23:24 | 显示全部楼层
什么是挺不住啊
zhang_2013 发表于 2019-2-18 23:25 | 显示全部楼层
看一下M7219手册,最高显示频率是多少?
whtwhtw 发表于 2019-2-19 09:12 | 显示全部楼层
数码管显示都有延时问题,不同平台要重新标定。循环显示频率太高的代价就是显示暗或者不显示
643757107 发表于 2019-2-19 11:53 | 显示全部楼层
两个时钟不同吧,看看时序设置是不是延时需要调整。
飞鼠智能 发表于 2023-6-6 10:10 | 显示全部楼层
楼主,求上面的程序解决地方,本人正好遇到一模一样的问题。
Bowclad 发表于 2023-6-8 18:26 | 显示全部楼层
是不延时太快了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

22

帖子

0

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