标题: 求TM1650的程序,最近做了个数码管驱动的程序,但发现厂家给的程序竟然不行!改了很... [打印本页]

作者: xjx51    时间: 2021-7-10 08:43
标题: 求TM1650的程序,最近做了个数码管驱动的程序,但发现厂家给的程序竟然不行!改了很...
  1. /*****************************************************************************
  2. *版权信息:
  3. *文 件 名:
  4. *当前版本:V1.0
  5. *MCU 型号:STC12C5608AD
  6. *开发环境:Keil uVision4
  7. *晶震频率:11.0592MHZ      
  8. *完成日期:2013-07-29
  9. *程序功能:1.上电8段4位共阴数码管显示1、2、3、4.
  10.             2.按下K11与DIG1,K12与DIG2 ,K13与DIG3之间的按键,数码管第一位分别显示5、6、7。
  11. *免责声明:      
  12. ********************************************************************************/
  13. #include<reg52.h>                                  //MCU头文件
  14. #include<intrins.h>                                  //包含nop指令头文件
  15. #define uint unsigned int                          //数据类型宏定义
  16. #define uchar unsigned char                          //数据类型宏定义

  17. #define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();  //宏定义


  18. /********************定义控制端口**********************/
  19. sbit SCL=P3^3;                       //时钟线
  20. sbit SDA=P3^2;                       //数据线

  21. uchar keya;                             //定义读出按键返回值

  22. /*************1ms延时*晶振11.0592M********************/
  23. void delay(uint n)
  24. {
  25.     uint i;
  26.     while(n--)
  27.     for(i=0;i<550;i++);
  28. }

  29. /**************共阴数码管显示0-F**********************/
  30. uchar display[]={0xFF,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共阴极字段码

  31. /************ START信号*******************************/
  32. void FZH110_START()
  33. {
  34.    SCL=1;
  35.    SDA=1;
  36.    nop;
  37.    SDA=0;
  38.    nop;
  39.    SCL=0;
  40. }
  41. /******************** STOP信号************************/
  42. void FZH110_STOP()
  43. {
  44.     SDA=0;
  45.     nop;
  46.     SCL=1;
  47.     nop;
  48.     SDA=1;
  49.     nop;
  50.     SCL=0;
  51.     SDA=0;
  52. }
  53. /****************写1个字节给FZH110********************/
  54. void write_8bit( uchar dat)
  55. {
  56.     uchar i;
  57.     SCL=0;
  58.     for(i=0;i<8;i++)
  59.     {
  60.          if(dat&0x80)
  61.          {
  62.              SDA=1;
  63.              nop;
  64.              nop;
  65.              SCL=1;
  66.              nop;
  67.              nop;
  68.              nop;
  69.              nop;
  70.              nop;
  71.              SCL=0;         
  72.       }
  73.      else
  74.      {
  75.          SDA=0;
  76.          nop;
  77.          nop;
  78.          SCL=1;
  79.          nop;
  80.          nop;
  81.          nop;
  82.          nop;
  83.          nop;
  84.          SCL=0;
  85.    }        
  86.    dat<<=1;         
  87.                 }
  88.                 SDA=1;                        //ACK信号
  89.                 nop;
  90.                 nop;
  91.                 nop;
  92.                 nop;
  93.                 SCL=1;
  94.                 nop;
  95.                 nop;
  96.                 nop;
  97.                 nop;
  98.                 nop;
  99.                 SCL=0;
  100.                 nop;
  101.                 nop;         
  102. }

  103. /**********************读8bit**************************/
  104. uchar read_8bit()
  105. {
  106.         uchar dat,i;
  107.         SDA=1;
  108.         dat=0;
  109.         for(i=0;i<8;i++)
  110.         {
  111.         SCL=1;                        //时钟上沿
  112.         nop;
  113.         nop;
  114.         nop;
  115.         dat<<=1;
  116.         if(SDA)
  117.          dat++;
  118.         SCL=0;
  119.         nop;
  120.         nop;
  121.         nop;
  122.         nop;
  123.         }
  124.         SDA=0;                            //ACK信号
  125.         nop;
  126.         nop;
  127.         nop;
  128.         SCL=1;
  129.         nop;
  130.         nop;
  131.         nop;
  132.         nop;
  133.         SCL=0;
  134.         nop;
  135.         
  136.         return dat ;

  137. }
  138. /*******************读按键命令************************/
  139. uchar FZH110_read()
  140. {
  141.         uchar key;
  142.         FZH110_START();
  143.     write_8bit(0x4F);//读按键指令        
  144.         key=read_8bit();
  145.         FZH110_STOP();
  146.         return key;
  147. }
  148. /*****************发送命令信号***********************/
  149. void FZH110_send(uchar date1,uchar date2)
  150. {
  151.          FZH110_START();
  152.         write_8bit(date1);
  153.         write_8bit(date2);
  154.         FZH110_STOP();
  155. }

  156. /*****************显示函数***********************/
  157. void disp_close()
  158. {
  159.         FZH110_send(0x48,0x01);                     // 开启显示模式:8段显示,1级亮度
  160.         FZH110_send(0X68,display[1]);  //GID1
  161.     FZH110_send(0X6A,display[0]);  //GID2
  162.         FZH110_send(0X6C,display[0]);  //GID3
  163.         FZH110_send(0X6E,display[0]);  //GID4
  164. }


  165. /**************主函数**************************/
  166. void main(void)
  167. {
  168.                                                //上电显示1、2、3、4
  169.    delay(10);
  170.    
  171.    while(1)
  172.         {   
  173.            disp();
  174.     }
  175. }
复制代码
最近做了个数码管驱动的程序,但发现厂家给的程序竟然不行!改了很多地方没有效果,状态为:四位数码管只能显示同一个数字,显示了不同的就会花屏,而且亮度怎么改都没变化,请求各位大佬帮忙找找错误的地方!



作者: 51hei团团    时间: 2021-7-10 14:59
论坛搜索一下16504个字可以找到,这个应该可以:http://www.51hei.com/bbs/dpj-42984-1.html
作者: wulin    时间: 2021-7-10 17:19
数码管会花屏?闻所未闻。论坛有应用实例,搜一搜。
作者: sadv    时间: 2021-7-11 09:50
花屏可能是你的电压不对,硬件电路有问题,我曾经遇到过
作者: 张天师    时间: 2021-7-11 10:48
/********************共阴数码管代码*******************/
u8 code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //0--F。另外你的硬件电路是不是也有问题?
作者: man1234567    时间: 2021-7-12 08:09
厂家给的不行就说明厂家不想做生意了,而你改的也不行说明你真的不太懂。
所以,先查硬件问题再找其他问题。
作者: xqleft    时间: 2021-7-12 08:57
光从程序上来讲你这个程序100%出问题啊。 ,
void main(void)
{
                                               //上电显示1、2、3、4
   delay(10);
   
   while(1)
        {   
           disp();
    }
}
主循环得DISP();里面得函数嵌套的是甚么? 这是程序的问题,
其次你的硬件是不是按长家给的原理图搭接的。我前两天也出现了类似的问题, 就是供电的问题,
作者: design003    时间: 2021-7-12 11:09
器件厂家给的测试程序 很片面的  实际做项目不仅需要掌握更好的编程思路还要有硬件设计能力最起码要有硬件分析能力。你的问题其实并不大 最起码程序的流程是对的  仔细解析下你的实验硬件电路和厂家的电路有哪些出入  会找到问题的
作者: 开心就好hhhh    时间: 2021-7-12 15:15
你确定认真改了嘛,看你这个程序感觉写得一塌糊涂,首先共阴字断码就是错的,其次你上电显示1234的那一段程序也是错的,你的显示函数不是disp_close()吗,你主程序都引用错了,而且你的显示函数里显示的是E.和8.,8.,8.,希望你仔细看一下你的程序
作者: mengsiu    时间: 2021-7-12 23:00
卧槽,看到这个头像,还以为是我发的帖子呢。。。仔细一看,幸好不是。
作者: mengsiu    时间: 2021-7-12 23:05
看到这个头像,还以为是我发的帖子呢。
仔细一看,原来不是。
顺便附上我的TM1650的程序:☆在这里☆
作者: xjx51    时间: 2021-7-14 11:39
张天师 发表于 2021-7-11 10:48
/********************共阴数码管代码*******************/
u8 code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6 ...

之前发现数码管用成了共阳得了,换成共阴后还是不行
作者: xjx51    时间: 2021-7-14 11:40
man1234567 发表于 2021-7-12 08:09
厂家给的不行就说明厂家不想做生意了,而你改的也不行说明你真的不太懂。
所以,先查硬件问题再找其他问题 ...

我打过电话问了厂家结果厂家说他给的程序也有问题······
作者: xjx51    时间: 2021-7-14 11:42
xqleft 发表于 2021-7-12 08:57
光从程序上来讲你这个程序100%出问题啊。 ,
void main(void)
{

你仔细看看程序,我是在这个子函数里直接调用了显示函数的,厂家给的程序我就只是改了IO地址
作者: xjx51    时间: 2021-7-14 11:44
mengsiu 发表于 2021-7-12 23:05
看到这个头像,还以为是我发的帖子呢。
仔细一看,原来不是。
顺便附上我的TM1650的程序:☆在这里☆

您这个我用了还是不行呀,
作者: xjx51    时间: 2021-7-16 13:00
找到原因了,是芯片出了问题,换了一片就好了
作者: mengsiu    时间: 2021-7-24 17:05
xjx51 发表于 2021-7-14 11:44
您这个我用了还是不行呀,

我确定我的程序是可以用的。
http://www.51hei.com/bbs/dpj-121550-1.html
作者: joyb    时间: 2024-2-7 17:47
write_8bit(0x4F);//读按键指令
应该0x49




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1