?? 12864bk.c
字號:
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/*******************************************************************/
/* */
/* 延時函數 */
/* */
/*******************************************************************/
void delay(int ms)
{
while(ms--)
{
uchar i;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*******************************************************************/
/* */
/* 延時函數 */
/* */
/*******************************************************************/
void delay1(int ms)
{
while(ms--)
{
uchar y;
for(y=0;y<100;y++) ;
}
}
/*******************************************************************/
/* */
/*檢查LCD忙狀態 */
/*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。 */
/* */
/*******************************************************************/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
/*******************************************************************/
/* */
/*寫指令數據到LCD */
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */
/* */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*******************************************************************/
/* */
/*寫顯示數據到LCD */
/*RS=H,RW=L,E=高脈沖,D0-D7=數據。 */
/* */
/*******************************************************************/
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*******************************************************************/
/* */
/* LCD初始化設定 */
/* */
/*******************************************************************/
void lcd_init()
{
LCD_PSB = 1; //并口方式
LCD_RST = 0; //液晶復位
delay(3);
LCD_RST = 1;
delay(3);
lcd_wcmd(0x34); //擴充指令操作
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x0C); //顯示開,關光標
delay(5);
lcd_wcmd(0x01); //清除LCD的顯示內容
delay(5);
}
/*********************************************************/
/* */
/* 設定顯示位置 */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==1)
{X=0x80;}
else if (X==2)
{X=0x90;}
else if (X==3)
{X=0x88;}
else if (X==4)
{X=0x98;}
pos = X+Y ;
lcd_wcmd(pos); //顯示地址
}
/*********************************************************
* *
* 閃爍函數 *
* *
*********************************************************/
void lcdflag()
{
lcd_wcmd(0x08);
delay(400);
lcd_wcmd(0x0c);
delay(400);
lcd_wcmd(0x08);
delay(400);
lcd_wcmd(0x0c);
delay(400);
lcd_wcmd(0x08);
delay(200);
lcd_wcmd(0x0c);
delay(5);
lcd_wcmd(0x01);
delay(5);
}
/*********************************************************
* *
* 圖形顯示 *
* *
*********************************************************/
void photodisplay(uchar *bmp)
{
uchar i,j;
lcd_wcmd(0x34); //寫數據時,關閉圖形顯示
for(i=0;i<32;i++)
{
lcd_wcmd(0x80+i); //先寫入水平坐標值
lcd_wcmd(0x80); //寫入垂直坐標值
for(j=0;j<16;j++) //再寫入兩個8位元的數據
lcd_wdat(*bmp++);
delay1(1);
}
for(i=0;i<32;i++)
{
lcd_wcmd(0x80+i);
lcd_wcmd(0x88);
for(j=0;j<16;j++)
lcd_wdat(*bmp++);
delay1(1);
}
lcd_wcmd(0x36); //寫完數據,開圖形顯示
}
/*********************************************************
* *
* 清屏函數 *
* *
*********************************************************/
void clr_screen()
{
lcd_wcmd(0x34); //擴充指令操作
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x01); //清屏
delay(5);
}
/**********************************************************
; 顯示字符表代碼
**********************************************************/
void bytecode()
{
uchar s;
clr_screen(); //清屏
lcd_wcmd(0x80); //設置顯示位置為第一行
for(s=0;s<16;s++)
{
lcd_wdat(0x30+s);
}
lcd_wcmd(0x90); //設置顯示位置為第二行
for(s=0;s<16;s++)
{
lcd_wdat(0x40+s);
}
lcd_wcmd(0x88); //設置顯示位置為第三行
for(s=0;s<16;s++)
{
lcd_wdat(0x50+s);
}
lcd_wcmd(0x98); //設置顯示位置為第四行
for(s=0;s<16;s++)
{
lcd_wdat(0x60+s);
}
}
/*********************************************************
* *
* 主函數 *
* *
*********************************************************/
void main()
{
uchar i;
delay(100); //上電,等待穩定
lcd_init(); //初始化LCD
while(1)
{
lcd_pos(1,0); //設置顯示位置為第一行
for(i=0;i<16;i++)
{
lcd_wdat(DIS1[i]);
delay(30);
}
lcd_pos(2,0); //設置顯示位置為第二行
for(i=0;i<16;i++)
{
lcd_wdat(DIS2[i]);
delay(30);
}
lcd_pos(3,0); //設置顯示位置為第三行
for(i=0;i<16;i++)
{
lcd_wdat(DIS3[i]);
delay(30);
}
lcd_pos(4,0); //設置顯示位置為第四行
for(i=0;i<16;i++)
{
lcd_wdat(DIS4[i]);
delay(30);
}
delay(1000);
lcdflag();
clr_screen(); //清屏
photodisplay(Photo1); //顯示圖片1
delay(2000);
clr_screen(); //清屏
photodisplay(Photo2); //顯示圖片2
delay(2000);
bytecode(); //顯示字符表代碼
delay(2000);
clr_screen();
}
}
/*********************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -