|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
TM1681具体信息请看TM1681详情
程序驱动的是共阳极0.8寸数码管,程序测试是没有什么问题的
.c文件
- #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);
- }
复制代码 .h文件
- #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
复制代码
|
|