[技术问答] 新唐单片机驱动tm1628点亮数码管怎么不行呢

[复制链接]
2667|12
 楼主| 张展豪123456 发表于 2018-4-25 09:14 | 显示全部楼层 |阅读模式
本帖最后由 张展豪123456 于 2018-4-25 09:16 编辑

#include <N76E003.h>
#include "intrins.h"

#define uchar unsigned char

#define uint  unsigned int



//¶¨Òå¿ØÖÆ¶Ë¿Ú

sbit DIO =P0^2;

sbit CLK =P0^1;

sbit STB =P0^0;





uchar const CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xef,0x6f};

uchar KEY[4]={0};





void send_8bit(uchar dat)

{

   uchar i;

   for(i=0;i<8;i++)

   {

      if(dat&0x01)

       DIO=1;

    else DIO=0;

    CLK=0;

   // CLK=1;

    dat=dat>>1;

   }

}





void command(uchar com)

{

  STB=1;

  STB=0;

  send_8bit(com);

}





void read_key()

{

  uchar i,j;

  command(0x42);  //¶Á¼üÅÌÃüÁî

  DIO=1;      //½«DIOÖøß

  for(j=0;j<5;j++)

    for(i=0;i<8;i++)




    {

      KEY[j]=KEY[j]>>1;

      CLK=0;

      CLK=1;

      if(DIO)

         KEY[j]=KEY[j]|0X80;

    }

  STB=1;

}





void display()

{

  uchar i;

  command(0x03);   
  command(0x40);     

  command(0xc0);   

  for(i=0;i<14;i++)     

  {

        send_8bit(CODE);      
  send_8bit(0);  
}

  command(0x8F);      


  STB=1;

}





void key_process()

{

//ÓÉÓû§±àд

}





void main()

{

  display();  
  while(1)

  {

    read_key();     

    key_process();   
  }

}
小S咯 发表于 2018-4-25 15:07 | 显示全部楼层
send_8bit函数CLK=1,为啥要屏蔽掉啊??
read_key函数两个for有问题吧?
最好每次调用发送前把STB拉低

评论

这个程序用51单片机可以将数码管点亮,用新塘的N76E003不行,不知道是哪里的差别  发表于 2018-4-26 15:56
123ycli 发表于 2018-4-26 16:53 | 显示全部楼层
51可以换过来不可以的话,注意延时和IO的初始化问题。
lewhile 发表于 2019-2-16 21:32 | 显示全部楼层
楼主怎么解决的啊,我的也遇到了问题,
643757107 发表于 2019-2-16 23:23 | 显示全部楼层
IO配置成准双向就跟普通51一样了
稳稳の幸福 发表于 2019-2-17 14:30 | 显示全部楼层
没用过这个型号的,不过我想应该都差不多的
小灵通2018 发表于 2019-2-17 21:35 | 显示全部楼层
用的什么IO模式
小明的同学 发表于 2019-2-19 11:51 | 显示全部楼层
有啥不行的,没搞定时序吧
xuanhuanzi 发表于 2019-2-19 22:28 | 显示全部楼层
确认一下时序
xuanhuanzi 发表于 2019-2-19 22:30 | 显示全部楼层
本帖最后由 xuanhuanzi 于 2019-2-19 22:32 编辑
  1. *文件名:     TM1628

  2. *单片机型号: AT89S52

  3. *开发环境:   Keil uVision3

  4. *晶震频率:   12M

  5. */

  6. #include

  7. #include

  8. #define uchar unsigned char

  9. #define uint  unsigned int



  10. //定义控制端口

  11. sbit DIO =P2^0;

  12. sbit CLK =P2^1;

  13. sbit STB =P2^2;



  14. //定义数据

  15. uchar const CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xef,0x6f}; //共阴数码管0-9的编码

  16. uchar KEY[5]={0};  //为存储按键值开辟的数组



  17. //向TM1628发送8位数据,从低位开始------------------------

  18. void send_8bit(uchar dat)

  19. {

  20.    uchar i;

  21.    for(i=0;i<8;i++)

  22.    {

  23.       if(dat&0x01)

  24.        DIO=1;

  25.     else DIO=0;

  26.     CLK=0;

  27.     CLK=1;

  28.     dat=dat>>1;

  29.    }

  30. }



  31. //向TM1628发送命令--------------------------------------

  32. void command(uchar com)

  33. {

  34.   STB=1;

  35.   STB=0;

  36.   send_8bit(com);

  37. }



  38. //读取按键值并存入KEY[]数组,从低字节开始,从低位开始----

  39. void read_key()

  40. {

  41.   uchar i,j;

  42.   command(0x42);  //读键盘命令

  43.   DIO=1;      //将DIO置高

  44.   for(j=0;j<5;j++)//连续读取5个字节

  45.     for(i=0;i<8;i++)

  46.     {

  47.       KEY[j]=KEY[j]>>1;

  48.       CLK=0;

  49.       CLK=1;

  50.       if(DIO)

  51.          KEY[j]=KEY[j]|0X80;

  52.     }

  53.   STB=1;

  54. }



  55. //显示函数,1-7位数码管显示数字0-6----------------------------

  56. void display()

  57. {

  58.   uchar i;

  59.   command(0x03);      //设置显示模式,7位10段模式

  60.   command(0x40);      //设置数据命令,采用地址自动加1模式

  61.   command(0xc0);      //设置显示地址,从00H开始

  62.   for(i=0;i<7;i++)     //发送显示数据

  63.   {

  64.         send_8bit(CODE[i]);      //从00H起,偶数地址送显示数据

  65.   send_8bit(0);  //因为SEG9-14均未用到,所以奇数地址送全“0”

  66. }

  67.   command(0x8F);      //显示控制命令,打开显示并设置为最亮

  68.   //read_key();       //读按键值

  69.   STB=1;

  70. }



  71. //按键处理函数-------------------------------------------------

  72. void key_process()

  73. {

  74. //由用户编写

  75. }



  76. //主函数-------------------------------------------------------

  77. void main()

  78. {

  79.   display();  //显示

  80.   while(1)

  81.   {

  82.     read_key();      //读按键值

  83.     key_process();    //按键处理     

  84.   }

  85. }
xuanhuanzi 发表于 2019-2-19 22:31 | 显示全部楼层
你参考的上面这个吧。这个是标准51的,003是增强51,时钟频率不同,你要调整相关的延时
xuanhuanzi 发表于 2019-2-19 22:33 | 显示全部楼层
另外关于端口的特性不同,你确认一下你设置的IO的模式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

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