TM1637驱动程序
/*****************************************************************************
*版权信息:深圳天微电子有限公司
*文 件 名: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驱动程序的更多相关文章
- 常用数据库的驱动程序和Url地址
常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc6.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC URL:jd ...
- linux网络设备驱动程序
4.linux网络设备驱动程序体系结构 -------------------------------------- | 数据包发送 | 数据包接收 | ----->网络协议接口层 | dev_ ...
- nandflash驱动程序编写
NAND FLASH是一个存储芯片 那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地 ...
- 嵌入式Linux驱动学习之路(二十六)DM9000C网卡驱动程序
基于DM9000C的原厂代码修改dm9000c的驱动程序. 首先确认内存的基地址 iobase. 确定中断号码. 打开模块的初始化函数定义. 配置内存控制器的相应时序(结合DM9000C.C的手册). ...
- 嵌入式Linux驱动学习之路(二十五)虚拟网卡驱动程序
一.协议栈层次对比 设备无关层到驱动层的体系结构 1).网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过 ...
- 嵌入式Linux驱动学习之路(二十四)Nor Flash驱动程序
Nor Flash和Nand Flash的不同: 类型 NOR Flash Nand Flash 接口 RAM-like,引脚多 引脚少 容量 小(1M.2M...) 大(512M.1G) 读 简 ...
- 18.tty驱动程序框架
tty驱动程序框架 一.TTY概念解析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备. 1.1串口终端(/dev/ttyS*) 串口终端是使用计算机 ...
- 15.linux按键驱动程序(二)
linux按键驱动程序 包含内容定时器延时去抖动,阻塞型设备驱动设计 一.定时器延时去抖 按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开.因而 ...
- 14.linux按键驱动程序(一)
按键驱动程序 本文学习主要包含按键硬件的实现.中断分层管理.按键定时器去抖.阻塞性驱动程序设计.这里面需要使用到混杂设备驱动和中断处理程序的内容. 一.创建按键混杂设备驱动模型 int key_ope ...
随机推荐
- c#基础_ArrayList
list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); //list.AddRange(list); //list.Clear();清空所有元素 ...
- 记录:swift学习笔记1-2
swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用h ...
- ftp和sftp
一.ftp ftp是文件传输协议,ftp协议包括两部分,一个是ftp客户端,另一个是ftp服务器. 原理:一般情况下,当使用FTP服务的时候,我们都知道默认是21号端口,其实还有一个20号端口.FTP ...
- javaSe-hashMap
package com.java.chap08.sec05; public class Student { private String name; private Integer age; publ ...
- codeforces Gym 100286H Hell on the Markets
紫书上面的题,队友做的,WA了freopen..爆了int... UVA 1614 - Hell on the Markets 奇怪的股市(贪心,结论)
- js 去除数组中的空值以及数组判断是否有重复数据
1.判断是否有重复数据 function isRepeat(array){ var hash = {}; for(var i in array) { if(array[i]!="" ...
- 剑指offer64 数据流中的中位数
priority_queue优先级队列,他的模板声明带有三个参数,priority_queue<Type, Container, Functional> Type 为数据类型, Conta ...
- 剑指offer38 数字在排序数组中出现的次数
这种方法没用迭代,而是使用了循环的方式 class Solution { public: int GetNumberOfK(vector<int> data ,int k) { if(da ...
- Hbase 完全分布式 高可用 集群搭建
1.准备 Hadoop 版本:2.7.7 ZooKeeper 版本:3.4.14 Hbase 版本:2.0.5 四台主机: s0, s1, s2, s3 搭建目标如下: HMaster:s0,s1(备 ...
- CVE-2014-1767
[0x00].简介 CVE-2014-1767漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的double ...