|
|
程序来源于@人人学会单片机
//************************************************************************************
// 单片机框架式编程 视频教程《人人学会单片机》
// 配套文档带目录《人人学会单片机.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布线需要,位选和段选都是打乱的
// 如果通信不稳定,可以给电源加电容
//************************************************************************************



哔哩哔哩视频
- //************************************************************************************
- // 单片机框架式编程 视频教程《人人学会单片机》
- // 配套文档带目录《人人学会单片机.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布线需要,位选和段选都是打乱的
- // 如果通信不稳定,可以给电源加电容
- //************************************************************************************
- #include "STC15.H"
- #include <intrins.h>
- typedef unsigned char u8; //数据类型缩写,必须写在自定义的头文件的最前面。代码从上到下按顺序编译的。
- typedef unsigned short u16;//数据类型缩写,必须写在自定义的头文件的最前面。代码从上到下按顺序编译的。
- typedef unsigned long u32;//数据类型缩写,必须写在自定义的头文件的最前面。代码从上到下按顺序编译的。
- sbit TM3130_GPIO=P3^3; //TM3130 数据口
- u8 data TM3130_Write_Buffer[8]; //数码管需要显示的缓存
- //芯片的SG0~SG7,跟数据B0~B7是位置相反的。
- //数码管取模,ABCDEFGP顺序:5、4、2、1、3、7、6、0
- u8 code SMG_SEG[20]={0xBE,0x14,0x7A,0x76,0xD4,0xE6,0xEE,0x34,0xFE,0xF6,0xFC,0xCE,0xAA,0x5E,0xEA,0xE8};
- //*****************************************************************************
- //TM3130B发送,本函数只适合:STC15W4K单片机 30MHz晶振
- //示波器实测:发0时单片机IO输出高电平300ns, 发1时单片机IO输出高电平680ns
- //*****************************************************************************
- void TM3130_Write_Data(u8 *Point,u8 len)
- {
- u8 data i,k;
- u8 bdata Value;
- for(i=0;i<len;i++) //多少位数码管
- {
- Value=*Point;
- k=0x80; //用来确定第几位数据发送
- while(k)
- {
- if(Value&k) //如果要发送的是数据1
- {
- TM3130_GPIO=1; //B TM3130脚就是高电平
- _nop_();_nop_();_nop_();_nop_();//延迟200ns
- }
- _nop_();_nop_();_nop_();_nop_();//延迟200ns
-
- TM3130_GPIO=1; //A 拉高
- _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//延迟300ns
-
- TM3130_GPIO=0; //C 拉低
- //右移和while需要700ns
- k>>=1; //右移一位,发送下一个bit
- }
- Point++;
- }
- }
- void TM3130_Display_Drive() // TM3130显示数据,PCB布线需要,位选和段选都是打乱的
- {
- static u16 xdata count=1000;
- if(count==1000) //先发送数据
- { count=0; //计数器清0
- EA=0; //发送前 总中断开关 拉闸
- TM3130_Write_Data(TM3130_Write_Buffer,8); //发送8个灯的数据
- EA=1; //发送后 总中断开关 闭合
- }
- else TM3130_GPIO=0; //后发送低电平不少于280us
-
- count++;
- }//*/
- void main()
- {
- while(1)
- {
- TM3130_Write_Buffer[3]=SMG_SEG[1]; //第1位数码管,PCB布线需要,位选和段选都是打乱的
- TM3130_Write_Buffer[2]=SMG_SEG[2]; //第2位数码管,PCB布线需要,位选和段选都是打乱的
- TM3130_Write_Buffer[0]=SMG_SEG[3]; //第3位数码管,PCB布线需要,位选和段选都是打乱的
- TM3130_Write_Buffer[1]=SMG_SEG[4]; //第4位数码管,PCB布线需要,位选和段选都是打乱的
-
- TM3130_Write_Buffer[7]=SMG_SEG[9]; //第1位数码管,PCB布线需要,位选和段选都是打乱的
- TM3130_Write_Buffer[6]=SMG_SEG[8]; //第2位数码管,PCB布线需要,位选和段选都是打乱的
- TM3130_Write_Buffer[4]=SMG_SEG[7]; //第3位数码管,PCB布线需要,位选和段选都是打乱的
- TM3130_Write_Buffer[5]=SMG_SEG[6]; //第4位数码管,PCB布线需要,位选和段选都是打乱的
- TM3130_Display_Drive();
- }
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|