?? kaiji.c
字號:
#include <reg51.h>
uchar code tab1[]={
" 歡迎使用 "
" "
"循跡、避障、蹺蹺"
"板平衡,智能小車"
};
uchar code tab32[]={
/*-- 調入了一幅圖像:F:\梁\畫圖\HOCO12832.bmp --*/
/*-- 寬度x高度=128x32 --*/
"小組成員: "
" 譚德超 "
" 廖俊博 "
" 朱沛遠 "
};
uchar code tab5[]={
/*-- 調入了一幅圖像:F:\梁\畫圖\COCK.bmp --*/
/*-- 寬度x高度=128x64 --*/
"初始化完成, "
"可以使用! "
" "
" "
};
/*-----------------------------------*/
void delay (uint us) //delay time
{
while(us--);
}
//**************************************
//**************************************
void delay1 (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay(1);
}
//**************************************
/*---------------------------------------*/
//我發現在讀指令碼的時候,程序先調用了6位的低電平,然再在1調用了10位的指令碼 。總共調用了16位的數據。
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
delay (50);
a=content;
E_CLK=0;
RW_SID=1;
for(i=0;i<5;i++)
{
E_CLK=1;
E_CLK=0;
}
RW_SID=0;
E_CLK=1;
E_CLK=0;
if(dat_comm)
RW_SID=1; //data
else
RW_SID=0; //command
E_CLK=1;
E_CLK=0;
RW_SID=0;
E_CLK=1;
E_CLK=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
a=a<<1;
RW_SID=CY;
E_CLK=1;
E_CLK=0;
}
RW_SID=0;
for(i=0;i<4;i++)
{
E_CLK=1;
E_CLK=0;
}
}
}
//******************************************
/*------------------初始化-----------------*/
void init_lcd (void)
{
wr_lcd (comm,0x30); /*30---基本指令動作*/
wr_lcd (comm,0x01); /*清屏,地址指針指向00H*/
delay (100);
wr_lcd (comm,0x06); /*光標的移動方向*/
wr_lcd (comm,0x0c); /*開顯示,關游標*/
}
//*******************************************
/*--------------顯示點陣----------------*/
//經過調試發現顯示點陣是非常有意思的,最主要的在于data1,data2上的兩組數據的取值,
//不同的取值對應著不同的點陣效果。
void lat_disp (uchar data1,uchar data2)
{
uchar i,j,k,x;
x=x1;
for(k=0;k<2;k++)
{
for(j=0;j<16;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34); //擴充指令操作。
wr_lcd (comm,y+j*2);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (datk,data1);
wr_lcd (datk,data1);
}
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j*2+1);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (datk,data2);
wr_lcd (datk,data2);
}
}
x=x2;
}
wr_lcd (comm,0x36);
}
/*-----------------------------------------------*/
/*---------------顯示漢字或字符----------------*/
void chn_disp (uchar code *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
for (j=0;j<4;j++)
{
for (i=0;i<16;i++)
wr_lcd (datk,chn[j*16+i]);
}
}
//**********************************************
/*-----------------------------------------------*/
//當data1=0xff,data2=0xff時,在x0,y0處反白顯示16xl*yl.我發現如果固定yo的值為0x80,
//那么再去改變x0的值的話,x0的值是多少就在那一塊反白,反白的范圍應該是32*16。但前提是
//x1=2,y1=16.
//如果x1=1,y1=8. 那么反白的范圍應該是16*8。
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
uchar i,j;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y0+j);
wr_lcd (comm,x0+i);
wr_lcd (comm,0x30);
wr_lcd (datk,data1); //寫數據到RAM.這類語句都是一個道理。
wr_lcd (datk,data2);
}
}
wr_lcd (comm,0x36);
}
//*****************************************************
/*--------------清DDRAM------------------*/
void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01); //清除顯示指令。
delay (180);
}
//**********************************************
/*------------------主程序--------------------*/
void kaiji ()
{
SP=0x5f;
init_lcd ();
while (1)
{
lat_disp (0x00,0x00);/**/
delay1(1000);
chn_disp (tab1);
delay1(1000);
con_disp (0xff,0xff,0x80,0x82,1,16);
delay1 (4000);
clrram();
lat_disp (0x00,0x00);
chn_disp (tab32);
delay1 (4000);
clrram();
chn_disp (tab5);
delay1 (8000);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -