资源简介
此代码为官方TM1638的51单片机驱动代码,共阳转共阴,稍作修改即可移植到别的平台
代码片段和文件信息
#include
#include
#define nop _nop_();
#define uchar unsigned char
#define uint unsigned int
sbit TM1638_STB =P1^0; //定义片选通讯口
sbit TM1638_CLK =P1^1; //定义时钟通讯口
sbit TM1638_DIO =P1^3; //定义数据输入/输出通讯口
bdata uchar y=0;//定义可以位寻址全局变量y
sbit y7 =y^7;
uchar Show[16] = {0x760x7b0x380x380x3f0x400x400x400x400x40};//初始化显示“HELLO”字符代码
// ----- 共阴代码寄存器组
uchar Show_LED[16]; //转换后的共阳显示代码寄存器
uchar CODE[10] = {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f}; //0~9显示代码
uchar TIME_secondsseconds_2sub_1sub_2shi_1shi_2; //时间寄存器依次从秒个位至小时十位
uchar TIME_count; //定时中断控制制位
uchar T_count; //时钟小数点闪
uchar count4; //保存按键控制对应的数码管闪
uchar Key_FLAG1;//按键标志位
uchar Key_COUNT1;//按键移动数动显示数据
uchar Key_LED=0; //按键单独显示赋值寄存器
uchar count7;
/*********************************
功能: TM1638写数据
**********************************/
void TM1638_InData(uchar wr_data)
{
uchar i;
TM1638_STB =0; //给有效的片选信号(片选信号是低电平有效)
nop;
nop;
for(i=0;i<8;i++)//开始传送8位数据,每循环一次传送一位数据
{
TM1638_CLK =0;
nop;
nop;
wr_data >>= 1;//移位数据,低位在前!
nop;
TM1638_DIO = CY;
nop;
nop;
TM1638_CLK =1;
nop;
}
}
/*********************************
功能:读按键子程序 由y 返回1BIT按键数据
**********************************/
unsigned char Read_TM1668_Data()
{
uchar d;
TM1638_STB = 0; //给有效的片选信号(片选信号是低电平有效)
TM1638_DIO = 1; //将TM1638_DIO置高,因为没有按键按下时,键值默认为00H,此时为了与键值有区别
for(d=0;d<8;d++)
{
TM1638_CLK = 0;
nop;
if(TM1638_DIO==1)
{
y7 = 1;
}
else
{
y7 = 0;
}
TM1638_CLK = 1;
if(d!=7){y=(y>>1);}
nop;
nop;
}
return(y);
}
/*********************************
将共阴代码转换为驱动共阳代码
将Show[]数组寄存器数据转换至Show_LED2[]
**********************************/
void conver_CODE()
{
uchar count1count2xconver[16]; //转换原理将Show[]的前8个元素(Show[0]~ Show[7])的第0位 放在Show_LED[]的第1个元素(Show_LED[0])
for(count1=0;count1<16;count1++) //Show[]的前8个元素(Show[0]~ Show[7])的第1位 放在Show_LED[]的第2个元素(Show_LED[1]),依此类推
{
conver[count1] = Show[count1];
}
for(count1=0;count1<8;count1++)
{
y = 0x00;
for(count2=0;count2<8;count2++)
{
x = conver[count2];
if((x&0x01) != 0){ y7 = 1;}
if(count2 != 0x07){y >>= 1;}
conver[count2]=(x>>1);
}
Show_LED[count1*2] = y;
y = 0x00;
for(count2=0;count2<8;count2++) //Show[]的后8个元素(Show[8]~ Show[15])的第0位 放在Show_LED[]的第1个元素(Show_LED[1])
{
x = conver[count2+8]; //Show[]的后8个元素(Show[8]~ Show[15])的第1位 放在Show_LED[]的第2个元素(Show_LED[1]),依次类推
if((x&0x01) != 0){ y7 = 1;}
if(count2 != 0x07){y >>= 1;}
conver[count2+8]=(x>>1);
}
Show_LED[count1*2+1] = y;
}
}
/*********************************
TM1638控制指令
功能: 驱动LED屏做相应的显示
**********************************/
void Display_TM1638_Order(uchar Show_led[16])
{
uchar h;
TM1638_STB = 1;
TM1638_CLK =
评论
共有 条评论