//LCD串口函数
void lcd_write_data(unsigned char rs,unsigned char cdata)//rs==0,为命令,==1,为数据
{
unsigned char i,temp;
LCD_CS=0;
LCD_CLK=0;
if(rs==0)
{
temp=(0xf8);//写入命令11111(RW)(RS)0
}
else
{
temp=(0xfa);//写入数据
}
LCD_CS=1;//启动
_nop_();
for(i=0;i<8;i++)//启动写入命令
{
LCD_STD=(bit)(temp&0x80);
temp<<=1;
LCD_CLK=1;
LCD_CLK=0;
}
temp=(cdata&0xf0);//写入第一高4位
for(i=0;i<8;i++)
{
LCD_STD=(bit)(temp&0x80);
temp<<=1;
LCD_CLK=1;
LCD_CLK=0;
}
cdata&=0x0f;
cdata<<=4;
temp=cdata;//写入第二低4位
for(i=0;i<8;i++)
{
LCD_STD=(bit)(temp&0x80);
temp<<=1;
LCD_CLK=1;
LCD_CLK=0;
}
LCD_CS=0;//关闭
}
//LCD初始化
void lcd_init(void)
{
lcd_write_data(lcd_cmd,0x30);//功能设定,基本指令动作
lcd_write_data(lcd_cmd,0x0c);//显示开关,关闭光标,关闭闪烁
lcd_write_data(lcd_cmd,0x01);//清显示
lcd_write_data(lcd_cmd,0x14);//点设定,光标右移动,AC自动+1
lcd_write_data(lcd_cmd,0x02);//地址归位
}
//某一行写入数据,数组型参数,注意不要大于16byte
void lcd_write_msg(unsigned char page,unsigned char *str)
{
unsigned char i=0;
if(page==0)//第一行
{
lcd_write_data(lcd_cmd,0x80);
}
else//第二行
{
lcd_write_data(lcd_cmd,0x90);
}
while((*str!=0)&&(i<16))//最大限制为16
{
lcd_write_data(lcd_dat,*str++);
i++;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>