//在指定的位置显示一个数字(0-9)函数(用来显示变量的值):
void LCD1602DisplayOneNumber( unsigned char y,unsigned char x,unsigned char v)
//y-行数值0-3,x-列数值0-19,v-变量的一位数字0-9
{
unsigned char lineaddr;
switch(y)//根据行号选择行地址(对于1602,2002液晶只有两行)
{
case 0:lineaddr=0x80;break;//第一行首地址
case 1:lineaddr=0xc0;break;//第二行首地址
//case 2:lineaddr=0x94;break;//第三行首地址 (2004LCD才有)
//case 3:lineaddr=0xd4;break;//第四行首地址 (2004LCD才有)
default:;
}
Write1602Command(lineaddr+x);//写地址
Write1602Data(0x30+v);//先将数字化成ASCII码,再写入
}
//在指定的位置显示字符串函数:
void LCD1602DisplayString( unsigned char y,unsigned char x, unsigned char *pstr)
//y-行数值0-3,x-列数值0-19,pstr-字符串指针
{ unsigned char lineaddr,n=0;
switch(y)//根据行号选择行地址(对于1602,2002液晶只有两行)
{
case 0:lineaddr=0x80;break;//第一行首地址
case 1:lineaddr=0xc0;break;//第二行首地址
//case 2:lineaddr=0x94;break;//第三行首地址 (2004LCD才有)
//case 3:lineaddr=0xd4;break;//第四行首地址 (2004LCD才有)
default:;
}
Write1602Command(lineaddr+x);//写地址
while(*pstr!='\0')//判断字符串是否写完
{
Write1602Data(*pstr++);//写字符
n++;
if((n+x)==16)//如果第一行写满,写第二行(对于1602液晶)
Write1602Command(0xc0);//写第二行地址
}
}
/1602初始化函数:
void Initialize1602()
{
Delayms(20);
Write1602Command(0x38);//显示模式设置:5*7点阵,8位数据接口
Write1602Command(0x08);//显示关
Write1602Command(0x01);//清屏
Write1602Command(0x06);//写一个字符地址指针加一、光标加一
Write1602Command(0x0c);//显示开
}
//主函数:
int main(void)
{
Initialize1602();//初始化1602
LCD1602DisplayString(0,2,"http://wushifuc51.21ic.org");
//在第一行第二个位置开始写字符串
LCD1602DisplayOneNumber(1,15,8);//在第二行最后一个位置显示数字8
while(1);
return 0;
} |