欢迎来到泰骏兴电子,大家有问题可以直接联系管理员QQ:233619809单片机 QQ群:59194556 各位游客也可以注册玩玩,享受更多权益。温馨提示:本网站仅提供平台学习以及渠道,一切后果自行承担,还望广大用户提高自我意识,请不要轻易相信他人,请不要轻易相信他人,请不要轻易相信他人。为了更好的管理论坛工作,所以现在使用邮箱注册,如果以前的邮箱不能修改的,请联系管理员代为修改

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 54|回复: 0

STC15单片机编写的TM3130程序

[复制链接]
发表于 2023-5-16 12:25:14 | 显示全部楼层 |阅读模式
程序来源于@人人学会单片机


//************************************************************************************
//  单片机框架式编程 视频教程《人人学会单片机》
//  配套文档带目录《人人学会单片机.pdf》
//        自学网址1:https://www.acfun.cn/v/ac15187311
//        自学网址2:https://www.bilibili.com/video/BV1Jx411Z7yC
//        自学网址3:https://www.ixigua.com/7143839926553936415
//        自学网址4:https://www.yuanzige.com/course/detail/80163

//        以下代码只在STC15W单片机上做测试,外挂晶振频率是30MHz
//        PCB布线需要,位选和段选都是打乱的
//        如果通信不稳定,可以给电源加电容
//************************************************************************************








哔哩哔哩视频




  1. //************************************************************************************
  2. //  单片机框架式编程 视频教程《人人学会单片机》
  3. //  配套文档带目录《人人学会单片机.pdf》
  4. //        自学网址1:https://www.acfun.cn/v/ac15187311
  5. //        自学网址2:https://www.bilibili.com/video/BV1Jx411Z7yC
  6. //        自学网址3:https://www.ixigua.com/7143839926553936415
  7. //        自学网址4:https://www.yuanzige.com/course/detail/80163

  8. //        以下代码只在STC15W单片机上做测试,外挂晶振频率是30MHz
  9. //        PCB布线需要,位选和段选都是打乱的
  10. //        如果通信不稳定,可以给电源加电容
  11. //************************************************************************************

  12. #include "STC15.H"
  13. #include <intrins.h>
  14. typedef unsigned char         u8;        //数据类型缩写,必须写在自定义的头文件的最前面。代码从上到下按顺序编译的。
  15. typedef unsigned short         u16;//数据类型缩写,必须写在自定义的头文件的最前面。代码从上到下按顺序编译的。
  16. typedef unsigned long         u32;//数据类型缩写,必须写在自定义的头文件的最前面。代码从上到下按顺序编译的。

  17. sbit TM3130_GPIO=P3^3;                                                //TM3130 数据口
  18. u8 data TM3130_Write_Buffer[8];                                //数码管需要显示的缓存

  19. //芯片的SG0~SG7,跟数据B0~B7是位置相反的。
  20. //数码管取模,ABCDEFGP顺序:5、4、2、1、3、7、6、0
  21. u8 code SMG_SEG[20]={0xBE,0x14,0x7A,0x76,0xD4,0xE6,0xEE,0x34,0xFE,0xF6,0xFC,0xCE,0xAA,0x5E,0xEA,0xE8};

  22. //*****************************************************************************
  23. //TM3130B发送,本函数只适合:STC15W4K单片机 30MHz晶振
  24. //示波器实测:发0时单片机IO输出高电平300ns, 发1时单片机IO输出高电平680ns
  25. //*****************************************************************************
  26. void TM3130_Write_Data(u8 *Point,u8 len)
  27. {
  28.         u8 data i,k;
  29.         u8 bdata Value;
  30.         for(i=0;i<len;i++)                                                //多少位数码管                                                        
  31.         {        
  32.                 Value=*Point;
  33.                 k=0x80;                                                                //用来确定第几位数据发送
  34.                 while(k)
  35.                 {
  36.                         if(Value&k)                                                //如果要发送的是数据1
  37.                         {
  38.                                 TM3130_GPIO=1;                                //B  TM3130脚就是高电平
  39.                         _nop_();_nop_();_nop_();_nop_();//延迟200ns
  40.                         }
  41.                         _nop_();_nop_();_nop_();_nop_();//延迟200ns
  42.                         
  43.                         TM3130_GPIO=1;                                        //A  拉高         
  44.                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//延迟300ns
  45.                         
  46.                         TM3130_GPIO=0;                                        //C  拉低
  47.                                                                                         //右移和while需要700ns
  48.                         k>>=1;                                                        //右移一位,发送下一个bit
  49.                 }
  50.         Point++;                        
  51.         }
  52. }

  53. void TM3130_Display_Drive()                                                //        TM3130显示数据,PCB布线需要,位选和段选都是打乱的
  54. {
  55.         static u16 xdata count=1000;
  56.         if(count==1000)                                                                //先发送数据
  57.         {        count=0;                                                                //计数器清0
  58.                 EA=0;                                                                        //发送前 总中断开关 拉闸
  59.                 TM3130_Write_Data(TM3130_Write_Buffer,8); //发送8个灯的数据
  60.                 EA=1;                                                                        //发送后 总中断开关 闭合
  61.         }
  62.         else TM3130_GPIO=0;                                                        //后发送低电平不少于280us
  63.         
  64.         count++;
  65. }//*/

  66. void main()
  67. {
  68.         while(1)
  69.         {
  70.                 TM3130_Write_Buffer[3]=SMG_SEG[1];        //第1位数码管,PCB布线需要,位选和段选都是打乱的   
  71.                 TM3130_Write_Buffer[2]=SMG_SEG[2];        //第2位数码管,PCB布线需要,位选和段选都是打乱的                  
  72.                 TM3130_Write_Buffer[0]=SMG_SEG[3];        //第3位数码管,PCB布线需要,位选和段选都是打乱的   
  73.                 TM3130_Write_Buffer[1]=SMG_SEG[4];        //第4位数码管,PCB布线需要,位选和段选都是打乱的   
  74.                
  75.                 TM3130_Write_Buffer[7]=SMG_SEG[9];        //第1位数码管,PCB布线需要,位选和段选都是打乱的   
  76.                 TM3130_Write_Buffer[6]=SMG_SEG[8];        //第2位数码管,PCB布线需要,位选和段选都是打乱的                  
  77.                 TM3130_Write_Buffer[4]=SMG_SEG[7];        //第3位数码管,PCB布线需要,位选和段选都是打乱的   
  78.                 TM3130_Write_Buffer[5]=SMG_SEG[6];        //第4位数码管,PCB布线需要,位选和段选都是打乱的                  
  79.                 TM3130_Display_Drive();
  80.         }
  81. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|泰骏兴电子科技有限公司 ( 粤ICP备2023060260号-1 ) 单片机爱好者

GMT+8, 2025-10-31 17:14

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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