找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3000|回复: 17
收起左侧

求TM1650的程序,最近做了个数码管驱动的程序,但发现厂家给的程序竟然不行!改了很...

  [复制链接]
ID:884042 发表于 2021-7-10 08:43 | 显示全部楼层 |阅读模式
  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. }
复制代码
最近做了个数码管驱动的程序,但发现厂家给的程序竟然不行!改了很多地方没有效果,状态为:四位数码管只能显示同一个数字,显示了不同的就会花屏,而且亮度怎么改都没变化,请求各位大佬帮忙找找错误的地方!


回复

使用道具 举报

ID:328014 发表于 2021-7-10 14:59 | 显示全部楼层
论坛搜索一下16504个字可以找到,这个应该可以:http://www.51hei.com/bbs/dpj-42984-1.html
回复

使用道具 举报

ID:213173 发表于 2021-7-10 17:19 | 显示全部楼层
数码管会花屏?闻所未闻。论坛有应用实例,搜一搜。
回复

使用道具 举报

ID:887202 发表于 2021-7-11 09:50 来自手机 | 显示全部楼层
花屏可能是你的电压不对,硬件电路有问题,我曾经遇到过
回复

使用道具 举报

ID:814525 发表于 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。另外你的硬件电路是不是也有问题?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:584814 发表于 2021-7-12 08:09 | 显示全部楼层
厂家给的不行就说明厂家不想做生意了,而你改的也不行说明你真的不太懂。
所以,先查硬件问题再找其他问题。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:548551 发表于 2021-7-12 08:57 | 显示全部楼层
光从程序上来讲你这个程序100%出问题啊。 ,
void main(void)
{
                                               //上电显示1、2、3、4
   delay(10);
   
   while(1)
        {   
           disp();
    }
}
主循环得DISP();里面得函数嵌套的是甚么? 这是程序的问题,
其次你的硬件是不是按长家给的原理图搭接的。我前两天也出现了类似的问题, 就是供电的问题,

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:798631 发表于 2021-7-12 11:09 | 显示全部楼层
器件厂家给的测试程序 很片面的  实际做项目不仅需要掌握更好的编程思路还要有硬件设计能力最起码要有硬件分析能力。你的问题其实并不大 最起码程序的流程是对的  仔细解析下你的实验硬件电路和厂家的电路有哪些出入  会找到问题的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:934353 发表于 2021-7-12 15:15 | 显示全部楼层
你确定认真改了嘛,看你这个程序感觉写得一塌糊涂,首先共阴字断码就是错的,其次你上电显示1234的那一段程序也是错的,你的显示函数不是disp_close()吗,你主程序都引用错了,而且你的显示函数里显示的是E.和8.,8.,8.,希望你仔细看一下你的程序

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:16255 发表于 2021-7-12 23:00 | 显示全部楼层
卧槽,看到这个头像,还以为是我发的帖子呢。。。仔细一看,幸好不是。
回复

使用道具 举报

ID:16255 发表于 2021-7-12 23:05 | 显示全部楼层
看到这个头像,还以为是我发的帖子呢。
仔细一看,原来不是。
顺便附上我的TM1650的程序:☆在这里☆
回复

使用道具 举报

ID:884042 发表于 2021-7-14 11:39 | 显示全部楼层
张天师 发表于 2021-7-11 10:48
/********************共阴数码管代码*******************/
u8 code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6 ...

之前发现数码管用成了共阳得了,换成共阴后还是不行
回复

使用道具 举报

ID:884042 发表于 2021-7-14 11:40 | 显示全部楼层
man1234567 发表于 2021-7-12 08:09
厂家给的不行就说明厂家不想做生意了,而你改的也不行说明你真的不太懂。
所以,先查硬件问题再找其他问题 ...

我打过电话问了厂家结果厂家说他给的程序也有问题······
回复

使用道具 举报

ID:884042 发表于 2021-7-14 11:42 | 显示全部楼层
xqleft 发表于 2021-7-12 08:57
光从程序上来讲你这个程序100%出问题啊。 ,
void main(void)
{

你仔细看看程序,我是在这个子函数里直接调用了显示函数的,厂家给的程序我就只是改了IO地址
回复

使用道具 举报

ID:884042 发表于 2021-7-14 11:44 | 显示全部楼层
mengsiu 发表于 2021-7-12 23:05
看到这个头像,还以为是我发的帖子呢。
仔细一看,原来不是。
顺便附上我的TM1650的程序:☆在这里☆

您这个我用了还是不行呀,
回复

使用道具 举报

ID:884042 发表于 2021-7-16 13:00 | 显示全部楼层
找到原因了,是芯片出了问题,换了一片就好了
回复

使用道具 举报

ID:16255 发表于 2021-7-24 17:05 | 显示全部楼层
xjx51 发表于 2021-7-14 11:44
您这个我用了还是不行呀,

我确定我的程序是可以用的。
http://www.51hei.com/bbs/dpj-121550-1.html
回复

使用道具 举报

ID:1064915 发表于 2024-2-7 17:47 | 显示全部楼层
write_8bit(0x4F);//读按键指令
应该0x49
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表