51单片机驱动TM1640实现多个LED灯控制
TM1640的功能实现
- 功能详解
- TM1640的初始化
- TM1640时钟配置
- 起始信号
- 写数据
- 结束信号
- 发送显示
- IO口的初始化
- 宏定义部分
- 定位具体灯珠,实现控制
功能详解
本工程在于使用51系列单片机实现多个LED灯的定位显示控制功能
TM1640的初始化
void TM1640_Init(u8 InValue)
{ GPIO_WriteHigh(GPIO4,GPIO_PIN_1); //P41写高 DIN Delay_Some_Time(1);GPIO_WriteHigh(GPIO4,GPIO_PIN_0); //P40写高 SCLKif(InValue == DSPTM1640_DIS) //显示关 { TM1640Start();//数据写模式设置 TM1640WriteByte(DSP1640_DIS);//显示关控制 TM1640Stop(); } else { TM1640Start();//数据写模式设置 TM1640WriteByte(TM1640_FIEXD);//数据命令设置 地址自动加1 TM1640Stop(); TM1640Start(); //显示亮度设置 TM1640WriteByte(TM1640_DISPLAY); //显示命令控制 脉冲宽度14/16 TM1640Stop(); }
}
TM1640时钟配置
驱动TM1640需要自己按照数据手册配置时钟。时钟信号的配置决定了tm1640的使用。
起始信号
void TM1640Start(void)
{ GPIO_WriteHigh(GPIO4,GPIO_PIN_1); //P41写高 DIN GPIO_WriteHigh(GPIO4,GPIO_PIN_0); //P40写高 SCLK Delay_Some_Time(1); GPIO_WriteLow(GPIO4,GPIO_PIN_1); //p41低电平 DIN Delay_Some_Time(1); GPIO_WriteLow(GPIO4,GPIO_PIN_1); //p40低电平 SCLK Delay_Some_Time(1);
}
写数据
void TM1640WriteByte(u8 date)
{ u8 i; u8 Tmp; Tmp=date; GPIO_WriteLow(GPIO4,GPIO_PIN_1); //p41低电平 DINGPIO_WriteLow(GPIO4,GPIO_PIN_0); //p40低电平 SCLKfor(i=0;i<8;i++) { GPIO_WriteLow(GPIO4,GPIO_PIN_0); //p40低电平 SCLK Delay_Some_Time(1); if(Tmp&0x01) { GPIO_WriteHigh(GPIO4,GPIO_PIN_1); //P41写高 DIN Delay_Some_Time(1);} else { GPIO_WriteLow(GPIO4,GPIO_PIN_1); //p41低电平 DIN Delay_Some_Time(1); } GPIO_WriteHigh(GPIO4,GPIO_PIN_0); //P40写高 SCLKTmp = Tmp>>1; } GPIO_WriteLow(GPIO4,GPIO_PIN_0); //p40低电平 SCLK GPIO_WriteLow(GPIO4,GPIO_PIN_1); //p41低电平 DIN
}
结束信号
void TM1640Stop(void)
{ GPIO_WriteLow(GPIO4,GPIO_PIN_1); //p41低电平 DIN GPIO_WriteHigh(GPIO4,GPIO_PIN_0); //P40写高 SCLK Delay_Some_Time(1); GPIO_WriteHigh(GPIO4,GPIO_PIN_1);Delay_Some_Time(1);
}
发送显示
void TM1640_display(u8 *a)
{ u8 i; TM1640Start(); TM1640WriteByte(0x40); //设置起始地址 TM1640Stop();TM1640Start(); TM1640WriteByte(0xc0); for(i=0;i<16;i++) { TM1640WriteByte(a[i]); } TM1640Stop();TM1640Start(); TM1640WriteByte(0x8b); //设置起始地址 TM1640Stop();
}
IO口的初始化
void TM1640_GPIO_Config(void)
{GPIO_Init(GPIOx, GPIO_PIN_x,GPIO_MODE_OUT_PP); //控制tm1640引脚 DINGPIO_Init(GPIOx, GPIO_PIN_x,GPIO_MODE_OUT_PP); //控制tm1640引脚 SCLK
}
宏定义部分
#define addr_TM1640 (0xc0+0x01)
#define DSPTM1640_DIS 0
#define DSPTM1640_ENB 1
//模式设置
#define TM1640_ADD 0x40 //宏定义 自动加一模式
#define TM1640_FIEXD 0x44 //宏定义 固定地址模式
#define DSP1640_DIS 0x80 //宏定义 亮度 关
#define TM1640_DISPLAY 0x8f //宏定义 亮度 11/16 脉冲宽度可调节
定位具体灯珠,实现控制
#define DSPTM1640_DIS 0
u8 R_level[48] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
}
void deal_Disp()
{u8 i,j;u8 current_level = 0; //当前档位u16 led_data[8]={0};u8 F[4] = {0};while(1){ disp_level(current_level);//-----------------TM1640-----------------// for(i = 0; i < 8; ++i){for(j = 0; j < 4; ++j){//i 1 F[j] = ( ((R_level[((i*4)+j)*2] & 0xF0) >> 4) == current_level )//0 8|(( (R_level[((i*4)+j)*2] & 0x0F) == current_level) << 1) //0 8|(( ((R_level[((i*4)+j)*2 +1] & 0xF0) >> 4) == current_level) << 2)//0 9|(( (R_level[((i*4)+j)*2 +1] & 0x0F)== current_level) << 3);//i1 j3 15}led_data[i] = (F[1]<<12) | (F[0]<<8) | (F[3]<<4)| (F[2]); }//最后、显示TM1640_display((u8*)led_data);
}
void main(void)
{ TM1640_GPIO_Config();TM1640_Init(DSPTM1640_DIS); //TM1640初始化while(1){deal_Disp();}
}
结束!!!
51单片机驱动TM1640实现多个LED灯控制相关推荐
- 单片机p0口接8个LED c51语言,51单片机P1口接8个LED灯,低电平点亮,用定时器1定时250ms,让着8个LED不停闪烁,编写完整的C程序。...
51单片机P1口接8个LED灯,低电平点亮,用定时器1定时250ms,让着8个LED不停闪烁,编写完整的C程序. 更多相关问题 下列业务应该计入营业外支出的是(). 维生素的生理功能有哪些? 在实务中 ...
- 51单片机如何延时1s,让LED灯闪烁
精确地延时1s需要准确地计算,粗略地延迟1s可以自定义一个delay函数,下面我们让第一个LED灯延迟1s闪烁: //本题的delay函数参数为1时延迟的是1ms,1000是1s #include&l ...
- 51单片机_点亮第一个LED灯_0x01
/*点亮第一个led灯sbit 变量名=地址值; */#include <reg52.h>sbit led=P2^0; //即定义led为P2口的第0位,以便进行位操作.(sbit是定义特 ...
- STM32/51单片机实训day3——点亮LED灯、闪烁LED灯(一)理论
内 容:编写代码实现LED灯的点亮功能 学 时:2学时 知识点:分析原理图.LED灯控制原理 重点:GPIO参数配置.LED原理图分析 难点:编写 GPIO参数配置函数.LED点亮函数 时间:20 ...
- 51单片机驱动TCS3200颜色识别传感器
51单片机驱动TCS3200颜色识别传感器 TCS3200 简介 输出频率与滤光器选择说明 实验说明 接线 驱动 驱动说明 主要代码 主函数 实验现象 验证: 实验注意事项: TCS3200 简介 T ...
- c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序
51单片机驱动12位AD转换TLC2543电路图+程序 2015-06-18 16:51:15 来源:51hei void resultvolt() { volt=volt*5000.0/4334 ...
- 51单片机驱动——LCD1602
51单片机驱动--LCD1602 1.描述 51单片机控制LCD1602屏幕显示测量数据.固定字符串等,大家复制过去可以直接使用,相关注释我已标明. 2.子文件 LCD1602.c #include ...
- 用51单片机驱动蜂鸣器
用51单片机驱动蜂鸣器 #include<reg51.h>//头文件 sbit BEEP=P1^5;//位定义P1的第五个端口为蜂鸣器 void delay() //延时函数 {unsig ...
- 51单片机驱动DS18B20温度传感器测量温度
51单片机驱动DS18B20温度传感器测量温度 1.DS18B20温度传感器介绍: 2.51单片机驱动DS18B20测量温度 1.DS18B20温度传感器介绍: ①引脚定义 引脚 符号 说明 1 GN ...
- 使用51单片机驱动YM12232B型液晶显示屏
这是一个使用51单片机驱动YM12232B 液晶显示器的例子,本人水平有限,仅供参考. 本实例中将使用51单片机控制YM12232B LCD分别在主窗口和副窗口中显示"科"和&qu ...
最新文章
- IT职场新人第一课:我的吐槽+我学到的
- python中readlines,在Python中连续两次使用readlines
- BD云20MB/s不限速,随时下架!
- MySQL-03:数据表操作基本命令笔记
- 无法初始化java类_myeclip运行java程序不能初始化类 NoClassDefFoundError
- CI Weekly #17 | flow.ci 支持 Java 构建以及 Docker/DevOps 实践分享
- 微服务、Kubernetes和无服务器之后,即将发生的……
- FJ的字符串java问题_蓝桥杯VIP试题 之 基础练习 FJ的字符串- JAVA
- 算法题003 斐波那契(Fibonacci)数列
- 翻译的艺术 —— 专有名词(广告词、国外品牌、语言等)
- c语言关键字c11,_Generic关键字及其语法和应用(C11标准),C语言_Generic详解
- 爱奇艺推出“帧绮映画MAX”标准打造高品质视听 多款电视机型获认证
- 大数据——DBT:dbt的数据质量监控插件re_data二次开发及编译(生产环境篇)
- 素数模同余式次数与其解数的关系
- 新鲜出炉的连连看连接算法Python版
- CUDA——Python基础与实现
- Mac出现异常,如何在M1或Intel Mac上重置NVRAM
- Linux磁盘监控工具说明
- Meth | phpstorm invalid descendent file name
- Vue中Css的scoped的原理
热门文章
- EPSON/爱普生打印机Linux打印服务器基于ARM驱动安装踩坑CUPS实现支持远程打印AirPrint
- 微软小娜关闭服务器,图文详解彻底关闭windows10系统里的小娜(Cortana)语音服务-系统操作与应用
-亦是美网络...
- Vue秒杀倒计时插件vue2-countdown
- 内插函数恢复模拟信号
- 解三对角矩阵以及循环三对角矩阵方程的数值计算方法
- 实习僧-竞品分析报告
- 金融计算机怎么调成链式,cfa计算器链式
- Linux并非无毒 十五年病毒简史
- 基于3D人像复原技术的试衣平台
- NetFramework3.5 win10 64位 32位 安装资源——免费下载