IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> TM1638模块驱动(stm32,可以显示led灯,数码管,按键操作)(包含全部功能) -> 正文阅读

[嵌入式]TM1638模块驱动(stm32,可以显示led灯,数码管,按键操作)(包含全部功能)

?

?

#include "TM1638.h"


//************************************************************
#define DISP_CMD0 0x00   //4位13段
#define DISP_CMD1 0x01   //5位12段
#define DISP_CMD2 0x02  //6位11段
#define DISP_CMD3 0x03  //7位10段 
//执行DISP_CMDx会把显示亮度关掉,但显示内容不变
//************************************************************

//************************************************************
#define cmdwr1 0x40   //地址自动加一
#define cmdwr2 0x44   //固定地址
#define cmdwr3 0x40  //mcu写给TM1638
#define cmdwr4 0x42  //mcu读按键值(TM1638)至少延时1us 
//************************************************************
#define	DISP_OFF	    0X80   //关
#define	DISP_LV0	   	0X88   //最暗0x88--0x8F
#define	DISP_COMMAND	0x80   //小数点
#define	ADDR_COMMAND	0XC0   //地址从0x00开始
//*************************************************************
//共阴数码管显示代码
u8 code_tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                           0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void TM1638_Write(unsigned char DATA){//写数据函数(没有STB—ENABLE)
   
   u8 ji;
	for(ji=0;ji<8;ji++)
	{
		CLK=0;
		if(DATA&0X01) DIO=1;
		else          DIO=0;
			DATA=DATA>>1;
		CLK=1;
	}
}
/*u8 TM1638_Read(void){     //读单个数据DIO要设为输入
  
	u8 ir,Datar=0x00;
	DIN=1;
	for(ir=0;ir<8;ir++)
	{
	Datar>>=1;
		CLK=0;
		if(DIN)
			Datar|=0x80;
		CLK=1;
	}
	return Datar;
}*/

void Write_COM(unsigned char cmd){     //发送命令字
	
	STB=0;
	TM1638_Write(cmd);
	STB=1;
}
/*u8 TM1638_ReadKey(void)     //读按键值DIO要设为输入
  {
		u8 ki;   u8 keybuff[4];   u8 keyvalue=0;
	STB=0;
	TM1638_Write(0x42);       //读数据命令
			delay_us(5);               ///不同mcu不同的延时?????****
	for(ki=0;ki<4;ki++)
		{
			keybuff[ki]=TM1638_Read();
		}
	STB=1;
		 // 8键  col:K3  row:KS1~KS8
  if((keybuff[0]&0x01)==0x01)  keyvalue=1;
	if((keybuff[0]&0x10)==0x10)  keyvalue=2;
	if((keybuff[1]&0x01)==0x01)  keyvalue=3;
	if((keybuff[1]&0x10)==0x10)  keyvalue=4;
	if((keybuff[2]&0x01)==0x01)  keyvalue=5;
	if((keybuff[2]&0x10)==0x10)  keyvalue=6;
	if((keybuff[3]&0x01)==0x01)  keyvalue=7;
	if((keybuff[3]&0x10)==0x10)  keyvalue=8;
       return keyvalue;	
	}*/
	
void Write_DATA(u8 add,u8 DATA){	//指定地址写入数据
    	
	Write_COM(0x44);//固定地址
	STB=0;
	TM1638_Write(0xc0|add);
	TM1638_Write(DATA);
	STB=1;
}

void init_TM1638(void){  //三个输出端口初始化
	 u8 i;
	  GPIO_InitTypeDef  GPIO_InitStructure; 	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); //A,B,C,时钟     
    GPIO_InitStructure.GPIO_Pin = TM1638_DIO | TM1638_CLK| TM1638_STB;	//定义IO接口; //选择端口号(0~15或all)                        
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式       
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    
	  GPIO_Init(TM1638_GPIOPORT, &GPIO_InitStructure);
	
	  GPIO_SetBits(TM1638_GPIOPORT,TM1638_DIO);			//三个输出置高输出高
    GPIO_SetBits(TM1638_GPIOPORT,TM1638_CLK);	
	  GPIO_SetBits(TM1638_GPIOPORT,TM1638_STB);	

	  Write_COM(0X40);
	  Write_COM(0x8f);       //亮度 (0x88-0x8f)8级亮度可调	
	  
	   STB=0;		           //
	  TM1638_Write(0xc0);    //设置起始地址
	  for(i=0;i<16;i++)	   //传送16个字节的数据
		TM1638_Write(0x00);
	   STB=1;
	
}
void init_TM1638Read(void)
{
	  GPIO_InitTypeDef  GPIO_InitStructure; 	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); //A,B,C,时钟     
    GPIO_InitStructure.GPIO_Pin = TM1638_CLK| TM1638_STB;	选择端口号(0~15或all)                        
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式       
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)
	  GPIO_Init(TM1638_GPIOPORT, &GPIO_InitStructure);
}
/*void initTM1638DIN(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure; 
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); //A,B,C,时钟     
    GPIO_InitStructure.GPIO_Pin = TM1638_DIN;	选择端口号(0~15或all)
    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU; //选择IO接口工作方式 
	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)
    GPIO_Init(TM1638_GPIOPORT, &GPIO_InitStructure);

    GPIO_SetBits(TM1638_GPIOPORT,TM1638_DIO);			//三个输出置高输出高
    GPIO_SetBits(TM1638_GPIOPORT,TM1638_CLK);	
	  GPIO_SetBits(TM1638_GPIOPORT,TM1638_STB);	
}*/
void TM1638_display_Fix(unsigned char add,unsigned char DATA){//固定地址传送
const u8 buff[22]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x40,0x00};//数字0~9及0~9加点显示段码表
    //---------------      0    1    2    3    4    5    6    7    8    9    0.   1.   2.   3.   4.   5.   6.   7.   8.   9.   无    
	Write_COM(0X44);
	STB=0;
	TM1638_Write(0xC0+2*add);
			delay_us(1);
	TM1638_Write(buff[DATA]);			
	STB=1;
}

//***********************************************
void TM1638_OneLED(u8 num,u8 flag)	//单独控制一个LED函数,num为需要控制的led序号,flag为0时熄灭,不为0时点亮
{
	Write_COM(0x44);
	if(!flag)
		Write_DATA(2*num+1,1);
	else
		Write_DATA(2*num+1,0);
}  	
void TM1638_AllLED(u8 LED_flag)					//控制全部LED函数,LED_flag表示各个LED状态
{
	u8 i;
	Write_COM(0x44);
	for(i=0;i<8;i++)
		{
			if(LED_flag&(1<<i))
				Write_DATA(2*i+1,1);
			else
				Write_DATA(2*i+1,0);
		}
}
/*
选择IO接口工作方式:
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_AF_PP 复用推挽输出
GPIO_Mode_AF_OD 复用开漏输出
*/




#ifndef __TM1638_H
#define __TM1638_H	 
#include "sys.h"
#include "delay.h"

#define TM1638_GPIOPORT	GPIOA	//定义IO接口
#define TM1638_STB	GPIO_Pin_5	//定义IO接口
#define TM1638_DIO	GPIO_Pin_12	//定义IO接口
#define TM1638_CLK	GPIO_Pin_11	//定义IO接口

#define STB PAout(5)  //定义输出
#define DIO PAout(12)  //
#define CLK PAout(11)  //
//*******************************
#define DIN PAin(4)
#define TM1638_DIN GPIO_Pin_4//定义输入管脚



//**************************************************************
	void TM1638_Write(unsigned char DATA);
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 /* void initTM1638DIN(void);

	u8 TM1638_Read(void);
	u8 TM1638_ReadKey(void);  //读按键值*/
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    void init_TM1638(void);

  void Write_DATA(u8 add,u8 DATA);//指定地址写入数据
	void Write_COM(unsigned char cmd);//写命令
  void TM1638_display_Fix(unsigned char add,unsigned char DATA);//固定地址传送
  void TM1638_OneLED(u8 num,u8 flag);      //单独控制一个LED函数,num为需要控制的led序号,flag为0时熄灭,不为0时点亮
	void TM1638_AllLED(u8 LED_flag);				//控制全部LED函数,LED_flag表示各个LED状态
	
	
#endif

#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "TM1638.h"
//#include "led.h"

int main (void){//主程序
	RCC_Configuration(); //时钟设置
	init_TM1638();//亮度0x8b,7位10段//固定地址模式
	while(1){
 
		TM1638_display_Fix( 0,1);//固定地址传
		TM1638_display_Fix( 1,1);
		TM1638_display_Fix( 2,2);
		TM1638_display_Fix( 3,3);
    TM1638_display_Fix( 4,20);
    TM1638_display_Fix( 5,15);
    TM1638_display_Fix( 6,16);
    TM1638_display_Fix( 7,17);	
		
//		 TM1638_OneLED(1,1);      //单独控制一个LED函数,num为需要控制的led序号,flag为0时熄灭,不为0时点亮
//		TM1638_OneLED(2,0);      //单独控制一个LED函数,num为需要控制的led序号,flag为0时熄灭,不为0时点亮
//		TM1638_OneLED(3,1);
//		TM1638_OneLED(4,0);
//		TM1638_OneLED(5,1);      //单独控制一个LED函数,num为需要控制的led序号,flag为0时熄灭,不为0时点亮
//		TM1638_OneLED(6,0);      //单独控制一个LED函数,num为需要控制的led序号,flag为0时熄灭,不为0时点亮
//		TM1638_OneLED(7,1);
//		TM1638_OneLED(8,0);
		TM1638_AllLED(0xAA);				//控制全部LED函数,LED_flag表示各个LED状态
	
		
}
}



【变量定义】
u32     a; //定义32位无符号变量a
u16     a; //定义16位无符号变量a
u8     a; //定义8位无符号变量a
vu32     a; //定义易变的32位无符号变量a
vu16     a; //定义易变的 16位无符号变量a
vu8     a; //定义易变的 8位无符号变量a
uc32     a; //定义只读的32位无符号变量a
uc16     a; //定义只读 的16位无符号变量a
uc8     a; //定义只读 的8位无符号变量a

#define ONE  1   //宏定义

delay_us(1); //延时1微秒
delay_ms(1); //延时1毫秒
delay_s(1); //延时1秒
*/

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:15:04  更:2021-08-07 12:16:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 1:56:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计