|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2013-5-20 22:58:57
|
显示全部楼层
#include<reg52.h>
#include<tm1629.h>
#include<intrins.h>
#define nop() _nop_()
#define DEMO1
extern void TM1629_SendCmd(unsigned char dat );
extern void TM1629_SendAddr(unsigned char addr );
extern void TM1629_WriteByte(unsigned char addr,unsigned char dat );
extern void TM1629_WriteBlock(unsigned char addr, unsigned char len, unsigned char* buf );
extern void TM1629_ReadKey(unsigned char len, unsigned char* buf ); /* 连续读出nBytes数据存放于buf */
extern void TM1629_Config(void);
extern void convert1(unsigned char*pSrcBuf,unsigned char*pDstBuf,unsigned char n);
unsigned char LED[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //LED[0]-LED[15]对应16个数码管,TM1638最多只能接10个(),后6个无效,初始化显示成0
unsigned char Buf1[14] = {0x0ff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //显示缓存1,存放共阴显示数据
unsigned char Buf2[14] = {0x0ff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //显示缓存2,存放共阳显示数据
unsigned char KeyBuf[4] = {123,0,0,0};
unsigned char CODE[11] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x0};//数码管显示0-9的代码(共阴接法) ,0x00是数码管关闭的代码
unsigned char CODE1[11] = {0xBf,0x86,0xDb,0xCf,0xE6,0xEd,0xFd,0x87,0xFf,0xEf,0x0};//数码管显示带小数点的字
unsigned char DspBuf[14] = {0x00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};//16字节显示RAM
/* TM1629 DEMO1 地址自动加一*/
void TM1629_DEMO1(void)
{
convert1(Buf1,Buf2,14);
TM1629_WriteBlock(0xc0,14,Buf2);
//TM1629_SendCmd(0x8d);//开显示,亮度可以通过改变低三位调节 config中
TM1629_ReadKey(4,KeyBuf); //读按键
}
/* TM1629 DEMO2 固定地址模式*/
void TM1629_DEMO2(void)
{
unsigned char i;
convert1(Buf1,Buf2,14);
for(i=0;i<14;i++)
{
TM1629_WriteByte(0xc0+i,Buf2[i]);
}
//TM1629_SendCmd(0x8d);//开显示,亮度可以通过改变低三位调节
TM1629_ReadKey(4,KeyBuf); //读按键
}
void main(void)
{
unsigned int k,key;
TM1629_Config();//
while(1)
{
for(k=0;k<32500;k++)
{
nop();nop();nop();nop();nop();nop();
}
if (KeyBuf[0]==8)
key=1;
if (KeyBuf[0]==128)
key=2;
if (KeyBuf[1]==8)
key=3;
if (KeyBuf[1]==128)
key=4;
if (KeyBuf[2]==8)
key=5;
if (KeyBuf[2]==128)
key=6;
if (KeyBuf[3]==8)
key=7;
if (KeyBuf[3]==128)
key=8;
Buf1[6] = CODE[key];
TM1629_DEMO2();
}
请看,现在应该除了第7个数码管不显示8外,其它应该都显示8加小数点吧
|
|