RT12232F-2的串行驱动
要在VLCD与VDD及VSS这三个脚间接一个20K或50K的电位器,电位器的中间脚接VLCD,其它二脚接VDD和VSS.然后调节电位器的大小,直到不显示黑板为止。上电全显示黑的就需要调那个电位器。
使用RT12232F的串行接口要按图的说明跳线,否则你几天都成不了。
实验中试了那么多次,没有想到瑞特把这个东西给搞掉了,看来这RT也是
抄板来的. 跳线好了,显示也行了.编程的时候可以参考LCD在线的
12232F使用文档,控制流程也比较简单,注意发送数据间有点延时,
等待LCM数据处理完成。
部分代码:
#define LCM_WR_COM B1111_1000
#define LCM_WR_DATA B1111_1010
#define LCM_RD_STA B1111_1100
#define LCM_RD_DATA B1111_1110
//type:命令控制字,读或写数据、命令类型
//dat:数据
void send_lcd_data(uchar type,uchar dat)
{
uchar i,j;
j=type;
C_CS=1;
for(i=0;i<8;i++){
SID=(bit)(j&0x80);
SCLK=0;
j<<=1;
_nop_();
SCLK=1;
_nop_();
}
j=dat&0xf0;
for(;i<16;i++){
SID=(bit)(j&0x80);
SCLK=0;
j<<=1;
_nop_();
SCLK=1;
_nop_();
}
j=dat<<4;
j&=0xf0;
for(;i<24;i++){
SID=(bit)(j&0x80);
SCLK=0;
j<<=1;
_nop_();
SCLK=1;
_nop_();
}
C_CS=0;
}//line:显示的行
//要显示的缓冲
//要显示的字符的个数(汉字算2个字符)
void diap_line(uchar line,uchar *disp,uchar no)
{
uchar i=0;
if(line==1){
send_lcd_data(LCM_WR_COM,0X80);
}
else{
send_lcd_data(LCM_WR_COM,0X90);
}
while(buzzer_counter<1);
disp_lcm_counter=0;
for(i=0;i<15;i++){
while(disp_lcm_counter
if(i>=no){
send_lcd_data(LCM_WR_DATA,' ');
}
else{
send_lcd_data(LCM_WR_DATA,disp[i]);
}
}
}
//初始化LCM,2005-8-16 04:57下午
void init_rt12232(void)
{
uchar code start1[]=" 欢迎使用 ";
uchar code start2[]={"广州XXX产品! "};
while(buzzer_counter<40);//延时,等待处理完毕
send_lcd_data(LCM_WR_COM,0X30);
while(buzzer_counter<42);
send_lcd_data(LCM_WR_COM,0X30);
while(buzzer_counter<44);
send_lcd_data(LCM_WR_COM,0X30);
while(buzzer_counter<46);
send_lcd_data(LCM_WR_COM,0X30);
while(buzzer_counter<48);
send_lcd_data(LCM_WR_COM,0X3F);
while(buzzer_counter<50);
send_lcd_data(LCM_WR_COM,0X38);
while(buzzer_counter<50);
send_lcd_data(LCM_WR_COM,0X04);//
while(buzzer_counter<52);
send_lcd_data(LCM_WR_COM,b0000_1100);
while(buzzer_counter<54);
send_lcd_data(LCM_WR_COM,0X01);
while(buzzer_counter<56);
send_lcd_data(LCM_WR_COM,0X02);
while(buzzer_counter<58);
send_lcd_data(LCM_WR_COM,0X80);
while(buzzer_counter<60);
disp_lcm_counter=0;
diap_line(1,start1,sizeof(start1));
diap_line(2,start2,sizeof(start2));
_nop_();
}