TM1620操作
时间:10-02
整理:3721RD
点击:
我写的一个程序没有显示,求指教1
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
#define STB LATD7
#define CLK LATA1
#define DIN LATA0
uchar const CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
void delay1us()
{
uint i,j;
for(i=1; i>0; i--)
for(j=245; j>0; j--)
;
}
void init1620(void)
{
TRISA=0x00;
TRISD=0x00;
PORTA=0x00;
PORTD=0x00;
STB=1;
CLK=1;
DIN=1;
}
void write_byte(uchar byte)
{
uchar i;
STB=0; //片选信号低有效
delay1us();
for(i=0; i<8; i++) //开始传送8位数据,每循环一次传送一次数据
{
CLK=0;
delay1us();
if(byte&(1<<i))
{DIN=0;}
else
DIN=0;
delay1us();
CLK=1;
delay1us();
}
}
//tm1620控制指令
void tm1620(uchar a[])
{
uchar h;
STB=1;
CLK=1;
DIN=1;
write_byte(0x02); //显示模式设置,设置为6位选,8位段选
STB=1;
write_byte(0x40); // 写数据到显示寄存器,采用地址自动加一
STB=1;
write_byte(0xc0); // 显示寄存器的00H单元开始
for(h=0; h<4; h++)
{
write_byte(a[h]); //给显示寄存器传送数据
// write_byte(0); //
}
STB=1;
write_byte(0x8f);
}
void main(void)
{
uchar tempt[4];
uint temp=4321;
init1620();
while(1)
{
tempt[1]=CODE[1];
tm1620(temp);
}
}
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
#define STB LATD7
#define CLK LATA1
#define DIN LATA0
uchar const CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
void delay1us()
{
uint i,j;
for(i=1; i>0; i--)
for(j=245; j>0; j--)
;
}
void init1620(void)
{
TRISA=0x00;
TRISD=0x00;
PORTA=0x00;
PORTD=0x00;
STB=1;
CLK=1;
DIN=1;
}
void write_byte(uchar byte)
{
uchar i;
STB=0; //片选信号低有效
delay1us();
for(i=0; i<8; i++) //开始传送8位数据,每循环一次传送一次数据
{
CLK=0;
delay1us();
if(byte&(1<<i))
{DIN=0;}
else
DIN=0;
delay1us();
CLK=1;
delay1us();
}
}
//tm1620控制指令
void tm1620(uchar a[])
{
uchar h;
STB=1;
CLK=1;
DIN=1;
write_byte(0x02); //显示模式设置,设置为6位选,8位段选
STB=1;
write_byte(0x40); // 写数据到显示寄存器,采用地址自动加一
STB=1;
write_byte(0xc0); // 显示寄存器的00H单元开始
for(h=0; h<4; h++)
{
write_byte(a[h]); //给显示寄存器传送数据
// write_byte(0); //
}
STB=1;
write_byte(0x8f);
}
void main(void)
{
uchar tempt[4];
uint temp=4321;
init1620();
while(1)
{
tempt[1]=CODE[1];
tm1620(temp);
}
}