/*****************************************************************************
*版权信息:深圳天微电子有限公司
*文 件 名:TM1637-V1.0
*当前版本:V1.0
*MCU 型号:STC12C5608AD
*开发环境:Keil uVision4
*晶震频率:11.0592MHZ
*完成日期:2013-07-19
*程序功能:数码管驱动和按键:驱动8段6位LED共阳数码管显示,当对应按键按下时显示1~7,原理图请参考TM1637规格书;
*免责声明:1.此程序为TM1637驱动共阳LED数码管和按键演示程序,仅作参考之用。
2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任
********************************************************************************/
#include <reg52.h> //头文件
#include "intrins.h" //包含_nop_()指令头文件 #define nop _nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义 /********************定义控制端口**********************/
sbit CLK=P2^; //定义CLK
sbit DIO=P2^; //定义DIO /********************定义数据*************************/
unsigned char code CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳显示数据0-F
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f*/
unsigned char code TAB[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//数码管不显示 /********************延时函数,延时nms******************/
void delay_nms(unsigned int n)
{
unsigned int i;
while(n--)
for(i=;i<;i++);
} /********************Start函数*************************/
void I2CStart()
{
DIO=;
CLK=;
nop;
DIO=;
nop;
DIO=;
nop;
CLK=;
} /********************Stop函数*************************/
void I2CStop()
{
CLK=;
nop;
nop;
DIO=;
nop;
nop;
CLK=;
nop;
nop;
nop;
DIO=;
nop;
CLK=;
DIO=;
} /***************发送8bit数据,从低位开始**************/
void I2CWritebyte(unsigned char oneByte)
{
unsigned char i;
for(i=;i<;i++)
{
CLK=;
if(oneByte&0x01)
DIO=;
else
DIO=;
nop;
CLK=;
oneByte=oneByte>>;
}
//8位数据传送完
CLK = ; //判断芯片发过来的ACK应答信号
nop;
while(DIO==);
nop;
CLK = ;
nop;
} /***************读按键程序**************/
unsigned char read_key()
{
unsigned char rekey,i;
I2CStart();
I2CWritebyte(0x42); //写读键指令0x42
DIO=;
for(i=;i<;i++)
{
CLK=;
nop;
nop;
rekey=rekey>>; //先读低位
nop;
nop;
CLK=;
if(DIO)
rekey=rekey|0x80;
else
rekey=rekey|0x00;
nop;
}
CLK = ; //判断芯片发过来的ACK应答信号
nop;
nop;
while(DIO==);
nop;
nop;
CLK = ;
nop;
nop;
I2CStop(); return rekey;
} /************显示函数,地址自加一************/
void disp0(unsigned char *p)
{
unsigned char i;
I2CStart();
I2CWritebyte(0x40); //数据命令设置:地址自动加1,写数据到显示寄存器
I2CStop(); I2CStart();
I2CWritebyte(0xc0); //地址命令设置:初始地址为00H
for(i=;i<;i++) //发送4字节数据到显存
{
I2CWritebyte(*p);
p++;
}
I2CStop(); I2CStart();
I2CWritebyte(0x8C); //显示控制命令:开显示,脉冲宽度为11/16.
I2CStop(); } /************显示函数,固定地址写数据************/
void disp(unsigned char add, unsigned char value)
{
I2CStart();
I2CWritebyte(0x44); //数据命令设置:固定地址,写数据到显示寄存器
I2CStop(); I2CStart();
I2CWritebyte(add); //地址命令设置:写入add对应地址 I2CWritebyte(CODE[value]); //给add地址写数据
I2CStop(); I2CStart();
I2CWritebyte(0x8C); //显示控制命令:开显示,脉冲宽度为11/16.
I2CStop(); } /************按键处理函数,按键数据低位在前高位在后************/
void key_process()
{
unsigned char temp;
temp=read_key(); //读取按键返回值
if(temp!=0xff)
{
disp0(TAB); //清屏
switch(temp)
{
case 0xf7 : disp(0xc0,);break; //K1与SG1对应按键按下,显示1
case 0xf6 : disp(0xc1,);break; //K1与SG2对应按键按下,显示2
case 0xf5 : disp(0xc2,);break; //K1与SG3对应按键按下,显示3
case 0xf4 : disp(0xc3,);break; //K1与SG4对应按键按下,显示4
case 0xef : disp(0xc4,);break; //K2与SG1对应按键按下,显示5
case 0xee : disp(0xc5,);break; //K2与SG2对应按键按下,显示6
case 0xed : disp(0xc0,);break; //K2与SG3对应按键按下,显示7
default : break;
}
}
} void main()
{
  disp0(CODE); //上电数码管显示0~5
  delay_nms();
  while() //按键后显示按键内容
  {
    key_process();
    delay_nms();
  }
}

TM1637驱动程序的更多相关文章

  1. 常用数据库的驱动程序和Url地址

    常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc6.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC URL:jd ...

  2. linux网络设备驱动程序

    4.linux网络设备驱动程序体系结构 -------------------------------------- | 数据包发送 | 数据包接收 | ----->网络协议接口层 | dev_ ...

  3. nandflash驱动程序编写

    NAND FLASH是一个存储芯片 那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地 ...

  4. 嵌入式Linux驱动学习之路(二十六)DM9000C网卡驱动程序

    基于DM9000C的原厂代码修改dm9000c的驱动程序. 首先确认内存的基地址 iobase. 确定中断号码. 打开模块的初始化函数定义. 配置内存控制器的相应时序(结合DM9000C.C的手册). ...

  5. 嵌入式Linux驱动学习之路(二十五)虚拟网卡驱动程序

    一.协议栈层次对比 设备无关层到驱动层的体系结构 1).网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过 ...

  6. 嵌入式Linux驱动学习之路(二十四)Nor Flash驱动程序

    Nor Flash和Nand Flash的不同: 类型 NOR Flash  Nand Flash  接口 RAM-like,引脚多 引脚少 容量 小(1M.2M...) 大(512M.1G) 读 简 ...

  7. 18.tty驱动程序框架

    tty驱动程序框架 一.TTY概念解析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备. 1.1串口终端(/dev/ttyS*) 串口终端是使用计算机 ...

  8. 15.linux按键驱动程序(二)

    linux按键驱动程序 包含内容定时器延时去抖动,阻塞型设备驱动设计 一.定时器延时去抖 按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开.因而 ...

  9. 14.linux按键驱动程序(一)

    按键驱动程序 本文学习主要包含按键硬件的实现.中断分层管理.按键定时器去抖.阻塞性驱动程序设计.这里面需要使用到混杂设备驱动和中断处理程序的内容. 一.创建按键混杂设备驱动模型 int key_ope ...

随机推荐

  1. 如何使用Spring Security手动验证用户

    1.概述 在这篇快速文章中,我们将重点介绍如何以编程方式在Spring Security和Spring MVC中设置经过身份验证的用户. 2. Spring Security 简而言之,Spring ...

  2. 物体检测丨从R-CNN到Mask R-CNN

    这篇blog是我刚入目标检测方向,导师发给我的文献导读,深入浅出总结了object detection two-stage流派Faster R-CNN的发展史,读起来非常有趣.我一直想翻译这篇博客,在 ...

  3. 举例实用详解sc.textFile()和wholeTextFiles()

    谈清楚区别,说明白道理,从案例开始: 1 数据准备 用hdfs存放数据,且结合的hue上传准备的数据,我的hue截图: 每个文件下的数据: 以上是3个文件的数据,每一行用英文下的空格隔开: 2 测试 ...

  4. 【转】monkey实战--测试步骤、常用参数、常规monkey命令

    monkey实战--测试步骤.常用参数.常规monkey命令   简要步骤:adb devices---了解包名--adb shell monkey -p 包名 -v 运行次数(多个参数的组合形成不同 ...

  5. 记录:swift学习笔记1-2

    swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用h ...

  6. Elasticsearch-分片原理1

    Elasticsearch版本:6.0 Elasticsearch基于Lucene,采用倒排索引写入磁盘,Lucene引入了按段搜索的概念,来动态更新索引. 一个Lucene索引包含一个提交点和三个短 ...

  7. copyout函数

    copyout Kernel Service   Purpose Copies data between user and kernel memory. Syntax #include <sys ...

  8. [SecureCRT]通过SFTP方式上传本地文件到服务器

    1.在本地建一个文件夹,如:d:\My Documents,在此目录下,放入我们需要上传的文件,如:nmon_linux_x86_64 2.然后打开我们的SecureCRT工具,一次选择Options ...

  9. 【Python图像特征的音乐序列生成】关于音乐生成的思路转变

    在前几天的讨论会上,有师兄指出原来的方法实在是很难训练,所以我改进了音乐生成的思路. 首先,我用LSTM生成的一定是一段音乐的序列化表达,那么我就可以用成型的一些数据集去训练LSTM.为了避免生成的音 ...

  10. IM云通信行业步入快车道,谁将成为代表中国的全球IM“独角兽”?

    2016年,Twilio的成功上市,以及抢眼的股价表现,拓宽了全球云通信行业的想象空间,行业内公司估值水平也集体上调. 在中国,IM云通信行业也从2016年开始进入了一个“黄金发展时期”,一批如融云. ...