找回密码
 立即注册
×

00:00:00

您有一张0.1元限时体验卡,马上领取获得VIP尊享特权。

请教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

免责声明:

本平台旨在开源共享精神,请勿发布敏感信息,任何违法信息我们将移交公安机关;

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-8 10:39 , Processed in 0.066815 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

返回顶部