代码在别的51上验证过了,可以显示,但是在SC92F7322上无法显示
#define WRITE_DATA_MODE_Z 0x40 // 地址自动加
#define WRITE_DATA_MODE_G 0x44 // 固定地址
#define START_DATA 0xC0 //
#define DISPLAY_EN 0x8F // 开显示 //显示命令控制 脉冲宽度14/16
#define DISPLAY_DIS 0x80 // 关显示
// 端口定义
sbit SCLK = P3^7;
sbit DIO = P3^6;
// sbit SCLK = P3^2;
// sbit DIO = P3^3;
unsigned char DisBuf[16]; // 显示缓存
unsigned char code ch_table[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄灭
};
void Init_Display();//初始化
void TM1640_Set(unsigned char add,unsigned char dat); //数码管显示
// 开始
void start()
{
SCLK=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
DIO=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
DIO=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCLK=0;
}
void send_data(unsigned char x) //送数据 低位先传
{
unsigned char i;
for(i=0;i<8;i++)
{
SCLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
DIO=(bit)(x&0x01);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCLK=1;
x>>=1;
}
SCLK=0;
}
// 结束
void stop()
{
SCLK=0;
DIO=0;
SCLK=1;
DIO=1;
}
void Init_Display()
{
start();
send_data(DISPLAY_DIS); // 关显示
stop();
start();
//send_data(WRITE_DATA_MODE_Z); // 自动地址
send_data(WRITE_DATA_MODE_G); // 固定地址
stop();
start();
send_data(0x8F); // 开显示
stop();
}
void TM1640_Set(unsigned char add,unsigned char dat) //数码管显示
{
unsigned char i;
start();
send_data(START_DATA); //起始地址
for(i=0;i<16;i++) //送16位数
{
DisBuf[i]=dat;
send_data(ch_table[DisBuf[i]]);
}
stop();
} |