/**********************************************************************
* 函数名称 : LCD_12864_String( uchar y, uchar x, uchar *pData )
* 函数功能 : 12864显示字符串
* 函数参数 : 行,列,需要显示的字符串或汉字
* 函数返回值 : 无
***********************************************************************/
void LCD_12864_string( uchar y, uchar x, uchar *pData )
{
LCD_12864_address_set( x, y );
while( *pData != '\0' )
{
write_data(*pData++);
}
}
/********************************************************************
* 函数名称 : LCD_12864_num(uchar y,uchar x,uchar num)
* 函数功能 : 12864以十进制格式显示一个两位数字
* 函数参数 : 行,列,需要输入需要显示的两位数字
* 函数返回值: 无
**********************************************************************/
void LCD_12864_2num(uchar y,uchar x,uchar num)
{
uchar num_1, num_2;
LCD_12864_address_set(x, y);
num_2 = (num/10) + 0x30;
num_1 = (num%10) + 0x30;
write_data(num_2);
write_data(num_1);
}
/********************************************************************
* 函数名称 : LCD_12864_num(uchar y,uchar x,uint num)
* 函数功能 : 12864以十进制格式显示一个四位数字
* 函数参数 : 行,列,需要输入需要显示的四位数字
* 函数返回值: 无
**********************************************************************/
void LCD_12864_4num(uchar y,uchar x,uint num)
{
uchar num_1, num_2, num_3, num_4 ;
LCD_12864_address_set(x, y);
num_4 = (num/1000) + 0x30;
num_3 = ((num%1000)/100) + 0x30;
num_2 = (((num%1000)%100)/10) + 0x30;
num_1 = (((num%1000)%100)%10) + 0x30;
write_data(num_4);
write_data(num_3);
write_data(num_2);
write_data(num_1);
}
/********************************************************************
* 函数名称 : LCD_12864_numx(uchar y,uchar x,char numx)
* 函数功能 : 12864以十六进制格式显示一个数字
* 函数参数 : 行,列,需要输入需要显示的数字(最高255 ==> 0xFF)
* 函数返回值: 无
**********************************************************************/
void LCD_12864_numx(uchar y,uchar x,uchar numx)
{
uchar num_l, num_h;
LCD_12864_address_set(x, y);
num_l = numx & 0x0F; //取键码的低四位
num_h = numx >> 4; //右移4次,高四位变为低四位
if(num_l > 9) num_l = num_l + 0x37;
else num_l = num_l + 0x30;
if(num_h > 9) num_h = num_h + 0x37;
else num_h = num_h + 0x30;
write_data(num_h);
write_data(num_l);
}
/********************************************************************
* 函数名称 : LCD_12864_draw_clear(void)
* 函数功能 : 12864绘图清屏
* 函数参数 : 无
* 函数返回值: 无
**********************************************************************/
void LCD_12864_draw_clear(void)
{
uchar i, j, k;
write_com(0x34); //扩展指令
for(i=0;i<2;i++)
{
for(j=0;j<32;j++)
{
write_com(0x80+j); //垂直地址+1
if(i==0)
{
write_com(0x80);//复位上半屏水平地址
}
else
{
write_com(0x88);//复位下半屏水平地址
}
write_com(0x36); //打开绘图
for(k=0;k<16;k++) //写两个字节数据水平地址加一,写完一行水平地址加到0x87
{
write_data(0x00);
}
}
}
write_com(0x30); //关闭扩展指令
}
/********************************************************************
* 函数名称 : LCD_12864_draw(*p)
* 函数功能 : 12864绘图
* 函数参数 : 图片数据数组首地址 (数组名)
* 函数返回值: 无
**********************************************************************/
void LCD_12864_draw(uchar *p)
{
uchar i, j, k;
LCD_12864_draw_clear(); //绘图清屏
write_com(0x34); //打开扩展指令
for(i=0; i<2; i++)
{
for(j=0; j<32; j++)
{
write_com(0x80+j); //垂直地址+1
if(i==0)
{
write_com(0x80); //复位上半屏水平地址
}
else
{
write_com(0x88); //复位下半屏水平地址
}
write_com(0x36); //打开绘图
for(k=0; k<16; k++) //写两个字节数据水平地址加一,写完一行水平地址加到0x87
{
write_data(*p++);
}
}
}
write_com(0x30); //关闭扩展指令
}
/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Test()
{ uchar dat1,dat2,dat3,dat4;
dat1=6;dat2=8;dat3=8;dat4=8;
write_com(0x03); //发指令,地址归位
delay(50); //延时
write_com(0x80); //第一行首地址0x80
print_string("2012年电子竞赛 "); //第一行显示(必须加一个空格否则不能下载)
write_com(0x94); //第二行首地址0x90,从第四个开始显示
write_data(dat1+0x30); //发送dat1的ASCII码,显示dat1的值
write_data(dat2+0x30); //发送dat1的ASCII码,显示dat2的值
write_data(dat3+0x30); //发送dat1的ASCII码,显示dat3的值
write_data(dat4+0x30); //发送dat1的ASCII码,显示dat4的值
write_data('H'); //发送H的ASCII码,显示H
write_data('z'); //发送z的ASCII码,显示z
write_com(0x90);
print_string("频率: ");
delay(500); //较长时间延时,保证下次操作前LCD完成上述功能处于非忙状态
}
void main()
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
int_port(); //端口初始化
lcdinit(); //LCD初始化
//Test(); //测试
LCD_12864_string(1,1,"2012年TI杯");
LCD_12864_string(2,1,"倒计时:");
LCD_12864_4num(3,1,0004);
LCD_12864_string(4,1,"天 ");
while(1); //CPU空转
} |