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灯控制相关推荐

  1. 单片机p0口接8个LED c51语言,51单片机P1口接8个LED灯,低电平点亮,用定时器1定时250ms,让着8个LED不停闪烁,编写完整的C程序。...

    51单片机P1口接8个LED灯,低电平点亮,用定时器1定时250ms,让着8个LED不停闪烁,编写完整的C程序. 更多相关问题 下列业务应该计入营业外支出的是(). 维生素的生理功能有哪些? 在实务中 ...

  2. 51单片机如何延时1s,让LED灯闪烁

    精确地延时1s需要准确地计算,粗略地延迟1s可以自定义一个delay函数,下面我们让第一个LED灯延迟1s闪烁: //本题的delay函数参数为1时延迟的是1ms,1000是1s #include&l ...

  3. 51单片机_点亮第一个LED灯_0x01

    /*点亮第一个led灯sbit 变量名=地址值; */#include <reg52.h>sbit led=P2^0; //即定义led为P2口的第0位,以便进行位操作.(sbit是定义特 ...

  4. STM32/51单片机实训day3——点亮LED灯、闪烁LED灯(一)理论

    内  容:编写代码实现LED灯的点亮功能 学  时:2学时 知识点:分析原理图.LED灯控制原理 重点:GPIO参数配置.LED原理图分析 难点:编写 GPIO参数配置函数.LED点亮函数 时间:20 ...

  5. 51单片机驱动TCS3200颜色识别传感器

    51单片机驱动TCS3200颜色识别传感器 TCS3200 简介 输出频率与滤光器选择说明 实验说明 接线 驱动 驱动说明 主要代码 主函数 实验现象 验证: 实验注意事项: TCS3200 简介 T ...

  6. c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序

    51单片机驱动12位AD转换TLC2543电路图+程序 2015-06-18 16:51:15   来源:51hei void resultvolt() { volt=volt*5000.0/4334 ...

  7. 51单片机驱动——LCD1602

    51单片机驱动--LCD1602 1.描述 51单片机控制LCD1602屏幕显示测量数据.固定字符串等,大家复制过去可以直接使用,相关注释我已标明. 2.子文件 LCD1602.c #include ...

  8. 用51单片机驱动蜂鸣器

    用51单片机驱动蜂鸣器 #include<reg51.h>//头文件 sbit BEEP=P1^5;//位定义P1的第五个端口为蜂鸣器 void delay() //延时函数 {unsig ...

  9. 51单片机驱动DS18B20温度传感器测量温度

    51单片机驱动DS18B20温度传感器测量温度 1.DS18B20温度传感器介绍: 2.51单片机驱动DS18B20测量温度 1.DS18B20温度传感器介绍: ①引脚定义 引脚 符号 说明 1 GN ...

  10. 使用51单片机驱动YM12232B型液晶显示屏

    这是一个使用51单片机驱动YM12232B 液晶显示器的例子,本人水平有限,仅供参考. 本实例中将使用51单片机控制YM12232B LCD分别在主窗口和副窗口中显示"科"和&qu ...

最新文章

  1. IT职场新人第一课:我的吐槽+我学到的
  2. python中readlines,在Python中连续两次使用readlines
  3. BD云20MB/s不限速,随时下架!
  4. MySQL-03:数据表操作基本命令笔记
  5. 无法初始化java类_myeclip运行java程序不能初始化类 NoClassDefFoundError
  6. CI Weekly #17 | flow.ci 支持 Java 构建以及 Docker/DevOps 实践分享
  7. 微服务、Kubernetes和无服务器之后,即将发生的……
  8. FJ的字符串java问题_蓝桥杯VIP试题 之 基础练习 FJ的字符串- JAVA
  9. 算法题003 斐波那契(Fibonacci)数列
  10. 翻译的艺术 —— 专有名词(广告词、国外品牌、语言等)
  11. c语言关键字c11,_Generic关键字及其语法和应用(C11标准),C语言_Generic详解
  12. 爱奇艺推出“帧绮映画MAX”标准打造高品质视听 多款电视机型获认证
  13. 大数据——DBT:dbt的数据质量监控插件re_data二次开发及编译(生产环境篇)
  14. 素数模同余式次数与其解数的关系
  15. 新鲜出炉的连连看连接算法Python版
  16. CUDA——Python基础与实现
  17. Mac出现异常,如何在M1或Intel Mac上重置NVRAM
  18. Linux磁盘监控工具说明
  19. Meth | phpstorm invalid descendent file name
  20. Vue中Css的scoped的原理

热门文章

  1. EPSON/爱普生打印机Linux打印服务器基于ARM驱动安装踩坑CUPS实现支持远程打印AirPrint
  2. 微软小娜关闭服务器,图文详解彻底关闭windows10系统里的小娜(Cortana)语音服务-系统操作与应用 -亦是美网络...
  3. Vue秒杀倒计时插件vue2-countdown
  4. 内插函数恢复模拟信号
  5. 解三对角矩阵以及循环三对角矩阵方程的数值计算方法
  6. 实习僧-竞品分析报告
  7. 金融计算机怎么调成链式,cfa计算器链式
  8. Linux并非无毒 十五年病毒简史
  9. 基于3D人像复原技术的试衣平台
  10. NetFramework3.5 win10 64位 32位 安装资源——免费下载