#define dissetmode 0x02 //显示模式设置 六位八段显示
#define writedatamode_z 0x40 //自动加一方式显存 写数据到显示寄存器
#define writeledmode_z 0x41 //自动加一方式写LED显存命令
#define readkeymode 0x42 //读按键命令
#define readswmode 0x43 //读SW命令
#define writedatamode_g 0x44 //固定模式
#define writeledmote_g 0x45 //固定模式写LED显存命令
#define startaddress 0xc0 //起始地址自动加1显示的起始地址设置,为00H
#define disconmode 0x8f //显示控制,显示开
#define uchar unsigned char
uchar a[]={ c_7SEG_0,c_7SEG_1,c_7SEG_2,c_7SEG_3,c_7SEG_4,c_7SEG_5,c_7SEG_6,c_7SEG_7,c_7SEG_8,c_7SEG_9,
c_7SEG_A,c_7SEG_B,c_7SEG_C,c_7SEG_D,c_7SEG_E,c_7SEG_F,
c_7SEG_LINE,c_7SEG_H,c_7SEG_NOP,c_7SEG_L,c_7SEG_N,c_7SEG_U,c_7SEG_C}; //1,2,3,4,5,6,7,8,9
unsigned long TmData = 0;
unsigned int i;
#define STB PB0 //定义端口
#define CLK PB1
#define DIN PB2
void indate(unsigned char p)
{
unsigned int i;
STB=0;
for(i=0;i<8;i++)
{
CLK=0;
if((p&0x01)!=0)
{
DIN=1;
}
else
{
DIN=0;
}
_nop_();_nop_();
CLK=1;
p=p>>1;
}
_nop_();_nop_();
}
void TM1620_Display(void)
{
uchar temp[4];
temp[3]=TmData%10000/1000;
temp[2]=(TmData%1000/100);
temp[1]=TmData%100/10;
temp[0]=TmData%10;
DIN=1;
CLK=1;
STB=1; //初始化
indate(dissetmode);//设置显示模式02
STB=1;
indate(writedatamode_g);//固定模式
STB=1;
for(i=0;i<4;i++)
{
if(i==0)
{
indate(startaddress+0x08); //传起始地址
}
else if(i == 1)
{
indate(startaddress+0x04); //传起始地址
}
else if(i == 2)
{
indate(startaddress+0x06); //传起始地址
}
else if(i == 3)
{
indate(startaddress+0x02); //传起始地址
}
indate(a[temp[i]]); //传数据
STB=1;
}
for(i = 5;i<=6;i++)
{
if(i == 5)
{
indate(startaddress+0x00); //传起始地址
indate(COM5_DATA); //传数据
STB=1;
}
else if(i == 6)
{
indate(startaddress+0x0A); //传起始地址
indate(COM6_DATA); //传数据
STB=1;
}
}
indate(disconmode); //显示控制命令
STB=1;
}
单片机实现TM1620驱动 含完整程序源码
最新推荐文章于 2024-04-16 17:12:40 发布