/*
Coder : FarmanDate  : 2018-01-02参考了厂家的TM1637数据手册,在此表示感谢。*/#include <STC89C5XRC.h>  //包含52单片机头文件
#include "Delay.h"sbit I2C_SCL = P2^1;   //定义模拟IIC总线的时钟线
sbit I2C_SDA = P2^0;   //定义模拟IIC总线的数据线#define TM1637_BRIGHTNESS 7 // 0 - 7void I2C_delay()
{nop_();
}void I2C_start()
{   I2C_SCL = 1; I2C_SDA = 1;I2C_delay();I2C_SDA = 0; // 时钟线设置为常态,低电平。
}/*
I2C 总线写1个字节不包含应答位的检测
*/
void I2C_write_byte(char byte_to_write)
{unsigned char i;for(i=0; i<8; i++){I2C_SCL = 0;I2C_SDA = byte_to_write & 0x01;I2C_delay();I2C_SCL = 1;I2C_delay();I2C_SCL = 0;I2C_delay();byte_to_write >>= 1;}return;
}void I2C_check_ack()
{// I2C 检查应答位,实际未检查,只发送了应答位时钟,认为TM1637工作正常I2C_SCL = 0;I2C_delay();//在第八个时钟下降沿之后延时5us,开始判断ACK 信号while(I2C_SDA){;}I2C_SCL = 1;I2C_delay();I2C_SCL=0;
}void I2C_send_ack()
{I2C_SDA = 0;I2C_delay();I2C_SCL = 1;I2C_delay();I2C_SCL = 0;I2C_delay();I2C_SDA = 1;I2C_delay();
}void I2C_stop()
{I2C_SCL = 0;I2C_delay();I2C_SDA = 0;I2C_delay(); I2C_SCL = 1;I2C_delay();I2C_SDA = 1;
}///
//
// TM1637模块操作函数
//
//void TM1637_write_command_byte(unsigned char command)
{I2C_start();I2C_write_byte(command);I2C_check_ack();I2C_stop();
}// bright : 0 - 7
void TM1637_display_switch_and_bright(bit enable_display, unsigned char bright)
{TM1637_write_command_byte(0x80 + (enable_display ? 0x08 : 0x00) + bright);
}void TM1637_write_display_bytes(unsigned char first_addr, unsigned char bytes_to_write[],unsigned char num_of_bytes)
{unsigned char i;I2C_start();I2C_write_byte(0x40);I2C_check_ack();I2C_stop();I2C_start();I2C_write_byte(0xC0 + first_addr);I2C_check_ack();for(i=0; i<num_of_bytes; i++){I2C_write_byte(bytes_to_write[i]);I2C_check_ack();} I2C_stop();
}// addr: 0 - 5
void TM1637_write_display_byte(unsigned char addr, unsigned char segments)
{I2C_start();I2C_write_byte(0x40 + addr);I2C_check_ack();I2C_stop();I2C_start();I2C_write_byte(0xC0 + addr);I2C_check_ack();I2C_write_byte(segments);I2C_check_ack();I2C_stop();
}code unsigned char TM1637_SEG_TAB[] =
{0x3F // 00111111 0,0x06 // 00000110 1,0x5B // 01011011 2,0x4F // 01001111 3,0x66 // 01100110 4,0x6d // 01101101 5,0x7d // 01111101 6,0x07 // 00000111 7,0x7F // 01111111 8,0x6F // 01101111 9,0x77 // 01110111 A,0x7C // 01111100 b,0x39 // 00111001 C,0x5E // 01011110 d,0x79 // 01111001 E ,0x71 // 01110001 F
};void TM1637_show_digit(unsigned char pos, unsigned char digit, bit with_dot)
{TM1637_write_display_byte(pos, TM1637_SEG_TAB[digit] | (with_dot ? 0x20 : 0x00));
}void TM1637_init()
{unsigned char i;TM1637_display_switch_and_bright(1, TM1637_BRIGHTNESS);for(i=0; i<6; i++){TM1637_write_display_byte(i, 0xFF);}Delay200ms();for(i=0; i<6; i++){TM1637_write_display_byte(i, 0x00);}Delay200ms();for(i=0; i<6; i++){TM1637_write_display_byte(i, 0xFF);}Delay200ms();for(i=0; i<6; i++){TM1637_write_display_byte(i, 0x00);}Delay200ms();
}void TM1637()
{unsigned char seg;unsigned char i, j;TM1637_init();while(1){for(i=0; i<16; i++){for(j=0; j<6; j++){TM1637_show_digit(j, i, 0);}Delay1s();}}}

TM1637数码管显示STC51单片机驱动程序相关推荐

  1. STM32F103单片机驱动TM1637数码管显示模块

    最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考. 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637 ...

  2. Arduino实时时钟设计(TM1637数码管显示)

    设计者:STCode(公众号同名) 1.实时时钟功能介绍 该设计利用DS1302获取时间数据,用4位led数码管显示模块显示当前的年月日信息,并且设计有一个按键,可以切换时间数据. 2. 使用主要器件 ...

  3. c语言控制数码管显示时间,单片机 控制 数码管显示

    常见LED数码管 LED数码管(LED Segment Displays)简介 数码管也称LED数码管,是由多个发光二极管封装在一起的"8"字型的器件. 按发光二极管单元连接方式可 ...

  4. c51数码管显示汇编语言,单片机数码管显示数字加减汇编程序

    用7SEG-MPX6-CA六位数码管显示 晶振=12MHZ,缓冲单元=30H,31H,32H,一个加一键减一键!没用31,32. MOV R7,#89H MOV DPTR,#TAB MOV 32H,# ...

  5. c51数码管显示汇编语言,单片机按键控制单个数码管显示汇编程序

    //***************************** //按键控制单个数码管显示程序 //***************************** ORG 0 LJMP MAIN ORG ...

  6. TM1637数码管显示 HAL库

    电赛结束了,21E题,用到了数码管 ---------------------- 四个引脚的数码管,四个数字 调了一下,显示成功 下面的代码是来自 我修改了一点,想显示什么就 TM1637_displ ...

  7. 动态数码管显示(单片机)

    只是记录单片机的学习,代码参考b站江科大自协化 数码管的消影,当执行 位选 段选 位选 段选时会出现数字窜位 所以在显示数字稳定后将其清零 Delay(1); P0=0x00; (因为这里的数码管时共 ...

  8. 单片机c语言数码管显示子程序,单片机C语言之两位数码管动态显示

    <单片机C语言之两位数码管动态显示>由会员分享,可在线阅读,更多相关<单片机C语言之两位数码管动态显示(1页珍藏版)>请在人人文库网上搜索. 1.include #define ...

  9. Futaba M11BT222A VFD(主控PT6311)STC51单片机驱动程序

    /* Futaba M11BT222A VFD 显示屏驱动程序Coder : FarmanVersion : 2018-01-07该显示屏采用PT6311芯片驱动,但板子端口和PT6311之间的信号经 ...

最新文章

  1. js字母大小写字母转换
  2. Yii中Action详解
  3. Python基础知识(第八天)
  4. go 语言系列 (四)位操作用法
  5. 【UCHome二次开发】全局变量
  6. C# 编码约定(C# 编程指南)
  7. 通过注册表修改远程桌面默认3389端口
  8. 我的世界java版游戏崩溃_我的世界全攻略之-游戏崩溃的解决方法
  9. HDU 1000 A + B Problem
  10. Android官方开发文档Training系列课程中文版:手势处理之记录手指移动的轨迹
  11. 《学习究竟是什么》思维导图笔记
  12. c语言,期末复习之求多项式分式数列 1+1/2+2/3+3/5 ...........前n项和
  13. Dynamips ADSL实验之一pppoeoa(工大瑞普修正版)
  14. python三行代码抠图_Python用5行代码如何实现批量抠图 Python用5行代码实现批量抠图方法...
  15. 混乱是阶梯:Web2与Web3的融合,也是COSO的窗口期
  16. 概率论与数理统计-----随机试验与随机事件、样本空间、事件集合表示
  17. java百分比转小数点_Java中小数与百分数的互相转换-Fun言
  18. 照片后期制作计算机配置,追求色彩真实还原,图片后期处理电脑配置推荐
  19. 【渝粤题库】广东开放大学 互联网金融 形成性考核
  20. python3 pyQt5之listWidget控件的高级运用--将多种控件组合插入其中一行

热门文章

  1. js 免费可靠cdn地址(富文本编辑器tinymce的实践)
  2. 发顶会论文,怎么就那么难?10个带你一起“收割”顶会论文的...
  3. BATCH: A Scalable Asymmetric DiscreteCross-Modal Hashing--文献翻译
  4. JavaScript是多线程还是单线程?
  5. scala中的break和continue
  6. OSGi跨bundle调用,jaxb-impl异常
  7. 对连续值/离散值进行预处理的两种方式(标准化/one-hot化)、反标准化/逆标准化、字符串预处理
  8. linux中vim保存快捷键设置,Linux中vim操作快捷键非常简洁
  9. 斐讯N1 docker安装opernwrt,当做旁路由
  10. 微信小程序转码机器人搭建方法,可爱猫,vml机器人插件