|  | 
 
| 
TM1681具体信息请看TM1681详情
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。您需要 登录 才可以下载或查看,没有账号?立即注册 
  
 程序驱动的是共阳极0.8寸数码管,程序测试是没有什么问题的
 
 
 .c文件
 
 
 .h文件复制代码#include "TM1681.h"
u8 dm[][16]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,
0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
};
void TM1621_io_init()
{
                        GPIO_InitTypeDef  GPIO_InitStructure;                                        
                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);        
                        
                        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
                        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 
                        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                        
                        GPIO_Init(GPIOD, &GPIO_InitStructure);                        
}
/********************************************
*
函数名:TM1681_Writer
*描 述:HT_9x16发送数据函数,高位在前 按位算
*参 数ata,cnt
*返 回:
********************************************/
void TM1681_Writer(u8 wdat, u8 cnt)
{
                        u8 i=0;
                        for(i=0;i<cnt;i++)
        {
                        TM1681_RW_OFF();         //拉低
                        if(wdat&0x80)TM1681_DATA_NO();
                        else TM1681_DATA_OFF();
                        TM1681_RW_NO();//延时2微妙
                        wdat<<=1;  //准备下一位数据的发送       
        }       
}
//*******************************
//*函数名:TM1681_Write_Command
//*描 述:发送命令函数
//*参 数:cmd
//*返 回:
//********************************/                                        `
void TM1681_Write_Command(u8 cmd)
{
                        TM1681_CS_L;       
                        TM1681_Writer(0x80,3);              //命令码100       
                        TM1681_Writer(cmd,9);               //命令数据,第9位为0       
                        TM1681_CS_H;
}
/************************************************************
*函数名:HT_9x16_Writer_AllDATA
*描 述:指定地址写入连续数据,cnt为写入数据个数,按8位算
*参 数:Addr,*p,cnt
*返 回:
*************************************************************/
void TM1681_Continuously_Write_Address_Data(u8 Addr,u8 *p,u8 cnt)//指定起始地址连续写入数据,cnt为写入数据个数,每个数据按位算
{       
                        u8 i;       
                        TM1681_CS_L;       
                        TM1681_Writer(0xa0,3);       
                        TM1681_Writer(Addr<<1,7);       
                        for(i=0;i<cnt;i++)       
        {               
                        TM1681_Writer(*p,8);               
                        p++;       
        }       
                        TM1681_CS_H;
}
/*******************************
*函数名:HT_9x16_Writer_DATA
*描 述:指定地址写入数据
*参 数:Addr,Data
*返 回:
********************************/
void TM1681_Write_Address_Data(u8 Addr,u8 Data)
{
                        TM1681_CS_L;       
                        TM1681_Writer(0xa0,3);                //命令码101       
                        TM1681_Writer(Addr<<1,7);             //写入7位地址     
                        TM1681_Writer(Data,4);                //写入4位数据       
                        TM1681_CS_H;
}
/*******************************
*函数名:HT_9x16_clr
*描 述:清屏函数
*参 数:
*返 回:
********************************/
void TM1681_Clear_Screen(void)
{
                        u8 i;       
                        TM1681_CS_L;        //di..       
                        TM1681_Writer(0xa0,3);       
                        TM1681_Writer(0x00<<1,7);       
                        for(i=0;i<36;i++)       
        {       
                        TM1681_Writer(0,8);       
        }
                        TM1681_CS_H;
}
//亮度
void TM1681_Brightness(u8 q)
{
                        if(q>15){q=15;}
                        q=q|0xf0;
                        TM1681_Write_Command(PWM_DUTY&q);       //PWM亮度设置
}
//闪烁
void TM1681_Flicker(_BLINK BLINK)
{
                        TM1681_Write_Command(BLINK);      //关闭闪烁
}
//COM口工作模式
void TM1681_COM_Mode(_COM_Mode Com_mode)
{
                        TM1681_Write_Command(Com_mode);      
}
//系统时钟设置
void TM1681_RC_MODE(_RC_MODE RC_MODE)
{
                        TM1681_Write_Command(RC_MODE);      
}
//最基础的参数设置
void TM1681_init()
{
                        TM1621_io_init();
                        TM1681_Write_Command(SYS_DIS);        //关闭HT_9x16内部RC时钟   
                        TM1681_COM_Mode(COM8_ROW32_Nmos);
                        TM1681_RC_MODE(RC_MASTER_MODE0);
                        TM1681_Write_Command(SYS_EN);                //打开HT_9x16内部RC时钟
                        TM1681_Write_Command(PWM_DUTY);       //PWM亮度设置         
                        TM1681_Write_Command(BLINK_OFF);      //关闭闪烁  
                        TM1681_Write_Command(LED_ON);                //打开LED显示
                        TM1681_Clear_Screen();
}
//字节倒序程序
u8 Byte_Reverse_Order(u8 data)
{
                        u8 q;
                        u8 w=0;
                        for(q=0;q<8;q++)
        {
                        w|=(data&0x01);
                        data=data>>1|data<<7;
                        w=w<<1|w>>7;
        }
                        w=w>>1|w<<7;
                        return w;
}
//次段程序要求
//ABCDEDF接在TM1681的COM0-COM7对应接上
void TM1681_Write_Display_Address_Data(u8 add,u8 data)
{
                        u8 q;
                        data=Byte_Reverse_Order(data)<<4|Byte_Reverse_Order(data)>>4;
                        q=data<<4;
                        TM1681_Write_Address_Data(add,q);                        
                        TM1681_Write_Address_Data(add+1,data);
}
 
 复制代码#ifndef __TM1681_H__
#define __TM1681_H__
#include "main.h"
#define TM1681_CS                PDout(8)
#define TM1681_CS_NO()        TM1681_CS=1
#define TM1681_CS_OFF()        TM1681_CS=0
#define TM1681_CS_H                TM1681_CS=1
#define TM1681_CS_L                TM1681_CS=0
#define TM1681_RW                PDout(10)
#define TM1681_RW_NO()        TM1681_RW=1
#define TM1681_RW_OFF()        TM1681_RW=0
#define TM1681_DATA                PDout(11)
#define TM1681_DATA_NO()        TM1681_DATA=1
#define TM1681_DATA_OFF()        TM1681_DATA=0
#define SYS_DIS                         0x00        //关闭系统时钟和 LED 循环
#define SYS_EN                                0x01        //打开系统振荡器
#define PWM_DUTY                        0xaf        //亮度设置        
#define BLINK_OFF                        0x08        //闪烁
#define LED_ON                                0x03        //开启 LED 循环
extern u8 dm[4][16];
//闪烁配置
typedef enum
{
                        BLINK_0FF=0x08,//关闭闪烁
                        BLINK_2Hz=0x09,//以每秒2Hz闪烁
                        BLINK_1Hz=0x0a,//以每秒1hz闪烁
                        BLINK_0_5Hz=0x0b,//以每秒0.5Hz闪烁
}_BLINK;
//COM工作模式配置
typedef enum 
{
                        COM8_ROW32_Nmos=0x40,                        //8个COM口,32个ROW口,Nmos输出
                        COM16_ROW24_Nmos=0x44,                        //
                        COM8_ROW32_Pmos=0x48,                        //
                        COM16_ROW24_Pmos=0x4c,                        //
}_COM_Mode;//COM口工作模式
typedef enum
{
                        SLAVE_MODE=0x10,//外置振荡,时钟由 OSC 引脚输入,同步信号由 SYN 引脚输入
                        RC_MASTER_MODE0=0x18,//内置振荡,OSC 保持低电平,同步信号在 SYN 引脚保持高电平,只应用于单芯片
                        RC_MASTER_MODE1=0x19,//内置振荡,内部频率在 OSC 输出,同步信号在 SYN 引脚输出
                        EXT_CLK_Master_Mode0=0x1c,//外置振荡,时钟由 OSC 引脚输入,同步信号由 SYN 引脚保持高电平,只引用于单芯片
                        EXT_CLK_Master_Mode1=0x1e,//外置振荡,时钟由 OSC 引脚输入,同步信号由 SYN 引脚输出
                        
}_RC_MODE;
void TM1681_init(void);//初始化
void TM1681_Write_Address_Data(u8 Addr,u8 Data);//按地址写入数据
void TM1681_Write_Display_Address_Data(u8 add,u8 data);//写入两位相邻地址的数据
void TM1681_Brightness(u8 q);//16级亮度
#endif 
 
 
 
 | 
 |