请教32G12K128怎么带TM1640驱动数码管先分享我成功的在STC15W408AS上的成功经验
2024-3-22 21:23 来自 qepuemc 发布 @ 综合讨论
//先分享我成功的在STC15W408AS上的成功经验
#include "intrins.h" //包含_nop_()指令头文件
#include <STC15F2K60S2.H>
//1.TM1640显示基本程序
sbit DIN=P1^5; //定义DIN数据端口
sbit CLK=P1^4; //定义CLK数据端口
unsigned int CODE={0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,}; //共阴数码管0~F字型码,需根据硬件接法定义
//1.TM1640显示基本程序
//2.TM1640显示基本程序
/********************Start函数*************************/
void I2CStart()
{
DIN=1;
CLK=1;
_nop_();
_nop_();
DIN=1;
_nop_();
_nop_();
DIN=0;
_nop_();
_nop_();
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
}
/********************Stop函数*************************/
void I2CStop()
{
CLK=1;
_nop_();
_nop_();
DIN=0;
_nop_();
_nop_();
DIN=1;
_nop_();
_nop_();
CLK=0;
DIN=0;
}
/***************发送8bit数据,从低位开始**************/
void I2CWritebyte(unsigned char oneByte)
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
if(oneByte&0x01)
DIN=1;
else
DIN=0;
_nop_();
_nop_();
_nop_();
CLK=1;
oneByte=oneByte>>1;
}
CLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
DIN=0;
_nop_();
_nop_();
}
/************显示函数,数码管1~16位显示0~F************/
void disp()
{
unsigned char i;
I2CStart();
I2CWritebyte(0x40); //数据命令设置:普通模式,地址自动加一
I2CStop();
I2CStart();
I2CWritebyte(0xc0); //地址命令设置:初始地址00H
for(i=0;i<16;i++) //发送16位显示数据
{
I2CWritebyte(CODE);
}
I2CStop();
I2CStart();
I2CWritebyte(0x8c); //显示控制:显示开,脉冲宽度设为11/16
I2CStop();
}
//2.TM1640显示基本程序
void main()
{
P0M0 = 0x00; P0M1 = 0x00;
P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
P4M0 = 0x00; P4M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
P6M0 = 0x00; P6M1 = 0x00;
P7M0 = 0x00; P7M1 = 0x00;
while(1)
{
//3.TM1640显示基本程序
//重新定义数码管显示的数据
//取数据
CODE=1;
CODE=2;
CODE=3;
CODE=4;
//取数据
//取数据
//CODE=7;
//CODE=7;
//CODE=9;
//CODE=9;
//取数据
//数据比较
//第1位
switch(CODE){
case 0: CODE=0x3F; break;
case 1: CODE=0x06; break;
case 2: CODE=0x5B; break;
case 3: CODE=0x4F; break;
case 4: CODE=0x66; break;
case 5: CODE=0x6D; break;
case 6: CODE=0x7D; break;
case 7: CODE=0x07; break;
case 8: CODE=0x7F; break;
case 9: CODE=0x6F; break;
}
//第1位
//第2位
switch(CODE){
case 0: CODE=0x3F; break;
case 1: CODE=0x06; break;
case 2: CODE=0x5B; break;
case 3: CODE=0x4F; break;
case 4: CODE=0x66; break;
case 5: CODE=0x6D; break;
case 6: CODE=0x7D; break;
case 7: CODE=0x07; break;
case 8: CODE=0x7F; break;
case 9: CODE=0x6F; break;
}
//第2位
//第3位
switch(CODE){
case 0: CODE=0x3F; break;
case 1: CODE=0x06; break;
case 2: CODE=0x5B; break;
case 3: CODE=0x4F; break;
case 4: CODE=0x66; break;
case 5: CODE=0x6D; break;
case 6: CODE=0x7D; break;
case 7: CODE=0x07; break;
case 8: CODE=0x7F; break;
case 9: CODE=0x6F; break;
}
//第3位
//第4位
switch(CODE){
case 0: CODE=0x3F; break;
case 1: CODE=0x06; break;
case 2: CODE=0x5B; break;
case 3: CODE=0x4F; break;
case 4: CODE=0x66; break;
case 5: CODE=0x6D; break;
case 6: CODE=0x7D; break;
case 7: CODE=0x07; break;
case 8: CODE=0x7F; break;
case 9: CODE=0x6F; break;
}
//第4位
disp(); //显示
//3.TM1640显示基本程序
}
}
接下来发出我移植到stc32上不成功点亮的样子。
#include "comm\STC32G.h"
#include "stdio.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define MAIN_Fosc 22118400L //定义主时钟(精确计算115200波特率)
//==========================================================================
#define Baudrate1 (65536 - MAIN_Fosc / 9600 / 4)
#define UART1_BUF_LENGTH 128
//==========================================================================
[color
#include "intrins.h" //包含_nop_()指令头文件
#include <STC15F2K60S2.H>
//1.TM1640显示基本程序
sbit DIN=P1^5; //定义DIN数据端口
sbit CLK=P1^4; //定义CLK数据端口
unsigned int CODE={0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,}; //共阴数码管0~F字型码,需根据硬件接法定义
//1.TM1640显示基本程序
//2.TM1640显示基本程序
/********************Start函数*************************/
void I2CStart()
{
DIN=1;
CLK=1;
_nop_();
_nop_();
DIN=1;
_nop_();
_nop_();
DIN=0;
_nop_();
_nop_();
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
}
/********************Stop函数*************************/
void I2CStop()
{
CLK=1;
_nop_();
_nop_();
DIN=0;
_nop_();
_nop_();
DIN=1;
_nop_();
_nop_();
CLK=0;
DIN=0;
}
/***************发送8bit数据,从低位开始**************/
void I2CWritebyte(unsigned char oneByte)
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
if(oneByte&0x01)
DIN=1;
else
DIN=0;
_nop_();
_nop_();
_nop_();
CLK=1;
oneByte=oneByte>>1;
}
CLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
DIN=0;
_nop_();
_nop_();
}
/************显示函数,数码管1~16位显示0~F************/
void disp()
{
unsigned char i;
I2CStart();
I2CWritebyte(0x40); //数据命令设置:普通模式,地址自动加一
I2CStop();
I2CStart();
I2CWritebyte(0xc0); //地址命令设置:初始地址00H
for(i=0;i<16;i++) //发送16位显示数据
{
I2CWritebyte(CODE);
}
I2CStop();
I2CStart();
I2CWritebyte(0x8c); //显示控制:显示开,脉冲宽度设为11/16
I2CStop();
}
//2.TM1640显示基本程序
void main()
{
P0M0 = 0x00; P0M1 = 0x00;
P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
P4M0 = 0x00; P4M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
P6M0 = 0x00; P6M1 = 0x00;
P7M0 = 0x00; P7M1 = 0x00;
while(1)
{
//3.TM1640显示基本程序
//重新定义数码管显示的数据
//取数据
CODE=1;
CODE=2;
CODE=3;
CODE=4;
//取数据
//取数据
//CODE=7;
//CODE=7;
//CODE=9;
//CODE=9;
//取数据
//数据比较
//第1位
switch(CODE){
case 0: CODE=0x3F; break;
case 1: CODE=0x06; break;
case 2: CODE=0x5B; break;
case 3: CODE=0x4F; break;
case 4: CODE=0x66; break;
case 5: CODE=0x6D; break;
case 6: CODE=0x7D; break;
case 7: CODE=0x07; break;
case 8: CODE=0x7F; break;
case 9: CODE=0x6F; break;
}
//第1位
//第2位
switch(CODE){
case 0: CODE=0x3F; break;
case 1: CODE=0x06; break;
case 2: CODE=0x5B; break;
case 3: CODE=0x4F; break;
case 4: CODE=0x66; break;
case 5: CODE=0x6D; break;
case 6: CODE=0x7D; break;
case 7: CODE=0x07; break;
case 8: CODE=0x7F; break;
case 9: CODE=0x6F; break;
}
//第2位
//第3位
switch(CODE){
case 0: CODE=0x3F; break;
case 1: CODE=0x06; break;
case 2: CODE=0x5B; break;
case 3: CODE=0x4F; break;
case 4: CODE=0x66; break;
case 5: CODE=0x6D; break;
case 6: CODE=0x7D; break;
case 7: CODE=0x07; break;
case 8: CODE=0x7F; break;
case 9: CODE=0x6F; break;
}
//第3位
//第4位
switch(CODE){
case 0: CODE=0x3F; break;
case 1: CODE=0x06; break;
case 2: CODE=0x5B; break;
case 3: CODE=0x4F; break;
case 4: CODE=0x66; break;
case 5: CODE=0x6D; break;
case 6: CODE=0x7D; break;
case 7: CODE=0x07; break;
case 8: CODE=0x7F; break;
case 9: CODE=0x6F; break;
}
//第4位
disp(); //显示
//3.TM1640显示基本程序
}
}
接下来发出我移植到stc32上不成功点亮的样子。
#include "comm\STC32G.h"
#include "stdio.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define MAIN_Fosc 22118400L //定义主时钟(精确计算115200波特率)
//==========================================================================
#define Baudrate1 (65536 - MAIN_Fosc / 9600 / 4)
#define UART1_BUF_LENGTH 128
//==========================================================================
[color
免责声明:
本平台旨在开源共享精神,请勿发布敏感信息,任何违法信息我们将移交公安机关;