液晶的显示实例图样
HT1621的驱动程序参考
//1 led1 p05
//2 data p06
//3 wr p07
//10 cs p15
void ini_io_lcd(void)
{
P05_PushPull_Mode;
P06_PushPull_Mode;
P07_PushPull_Mode;
P15_PushPull_Mode;
clr_P05;
clr_P06;
clr_P07;
clr_P15;
}
//锁定显示数据 3v=300khz=0.3M=3.3us 5v=500khz=0.5M=2us 16M=1/16us delay(40/16)=2.5us 参考ht1621b串行数据时钟
void lock_data(void)
{
delay(40);
LCD_WR_0 ;
delay(40);
LCD_WR_1 ;
delay(40);
}
//移位送8位数据
void shift(uchar i)
{
uchar j ;
for(j = 0; j < 8; j++)
{
if(i & 0x80)LCD_DATA_1 ;
else LCD_DATA_0 ;
lock_data();
i <<= 1 ;
}
}
//移位送n位数据
void shift2(uchar i, uchar n)
{
uchar j ;
for(j = 0; j < n; j++)
{
if(i & 0x80)LCD_DATA_1 ;
else LCD_DATA_0 ;
lock_data();
i <<= 1 ;
}
}
//写命令
void disp_cmd(uchar cmd)
{
//uchar i=0 ;
LCD_CS_0 ;
LCD_DATA_1 ;
lock_data();
LCD_DATA_0 ;
lock_data();
LCD_DATA_0 ;
lock_data();
shift(cmd);
//空数据
lock_data();
LCD_CS_1 ;
}
void beep(uchar t)
{
if(BeeEn)
{
disp_cmd(0x09);
beep_time = t ;
}
}
void beep3(void)
{
beep_count = 3;
beep_delay = 1;
}
uchar disp_hi(uchar temp)
{
return num[temp/10%10];
}
uchar disp_low(uchar temp)
{
return num[temp%10];
}
uchar disp_hi2(uchar temp)
{
return num2[temp/10%10];
}
uchar disp_low2(uchar temp)
{
return num2[temp%10];
}
//写全部数据
void disp_all(void)
{
uchar i = 0 ;
LCD_CS_0 ;
//101,addr=0
LCD_DATA_1 ;
lock_data();
shift(0x40);
for(i = 0; i < 4; i++)
{
shift(DisBuf);
DisBuf = 0x00 ;
}
shift2(DisBuf[4], 4);
for(i = 5; i < 16; i++)
{
shift(DisBuf);
DisBuf = 0x00 ;
}
LCD_CS_1 ;
}
//初始化显示
void Ini_Disp(void)
{
disp_cmd(0x00);
//关闭系统振荡器与LCD偏压器
disp_cmd(0x18);
//系统时钟源,片内RC振荡器
disp_cmd(0x80);
//IRQ输出失效
disp_cmd(0xa7);//?
//时基wdt输出
disp_cmd(0x01);
//打开系统振荡器
disp_cmd(0x29);
//1/3偏压,4个公共口
disp_cmd(0x03);
//打开偏压发生器
disp_cmd(0x08);
//关闭声音输出
disp_cmd(0x60);
//2kHZ声音
}
void disp(void)
{
uchar temp;
uchar d1, d2, d3, d4, d5, d6, d7, d8, d9;
uchar TT1, TT2, TT3, TT4, TT5, TT6, TT7, TT8, TT9, TT10, TT11, TT12, TT13,TT14, TT15, TT16, TT17, TT18;
............
............
............
............
............
............
............
if(ACFg)TT9 = 1;
temp = 0; //0
if(d6 != 99)temp |= num2[d6];//led6
if(T2dot)temp |= 0x08; //5p .
DisBuf[0] = temp;
temp = 0; //1
if(d5 != 99)temp |= num2[d5];//led5
if(TT14)temp |= 0x08;
DisBuf[1] = temp;
temp = 0; //2
if(d4 != 99)temp |= num2[d4];//led4
if(TT15)temp |= 0x08;//T15启动温度
DisBuf[2] = temp;
temp = 0; //3
if(TT1)temp |= 0x01;//T1实测温度
if(TT4)temp |= 0x08;//T4 C
if(TT2)temp |= 0x02;//T2 暖
if(TT3)temp |= 0x04; //T3冷
if(TT5)temp |= 0x10;//T5 温度控制
if(TT6)temp |= 0x20;//T6间隙控制
if(TT7)temp |= 0x40;//T7倒计时开
if(TT8)temp |= 0x80;//T8倒计时关
DisBuf[3] = temp;
temp = 0; //4
if(TT10)temp |= 0x10; //T10 停止温度
if(TT11)temp |= 0x20; //T11 c
if(TT13)temp |= 0x80; //h
if(TT12)temp |= 0x40;
DisBuf[4] = temp;
temp = 0; //5
if(d1 != 99)temp |= num[d1];//led1
DisBuf[5] = temp;
temp = 0; //6
if(d2 != 99)temp |= num[d2];//led2
DisBuf[6] = temp;
temp = 0; //7
if(d3 != 99)temp |= num[d3];//led3
if(T1dot)temp |= 0x80; //2p .
DisBuf[7] = temp;
temp = 0; //8
if(TT9)temp |= 0x80;//T9 AC
if(d7 != 99)temp |= num[d7];//led7
DisBuf[8] = temp;
temp = 0; //9
if(d8 != 99)temp |= num[d8];//led8
DisBuf[9] = temp;
temp = 0; //10
if(d9 != 99)temp |= num[d9];//led9
if(T3dot)temp |= 0x80; //8p .
DisBuf[10] = temp;
temp = 0; //11
if(TT16)temp |= 0x10;//T16 C
if(TT18)temp |= 0x40;//T18 min
if(TT17)temp |= 0x20;//T17 关
DisBuf[11] = temp;
disp_all();
}
这个设计已经做成成品了
本文旨在学习与交流,如果大家对本文有兴趣,可以去淘宝购买配套的电路板成品,用于当实验板学习开发测试,在淘宝上搜索关键字“HTC-10 电路板”,即可找到。
0