《EDA LCD 顯示設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《EDA LCD 顯示設(shè)計(7頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、LCD顯示程序:
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS=P0^0;
sbit LCD_RW=P0^1;
sbit LCD_EP=P0^2;
sbit KEY_SET=P1^3;
sbit KEY_UP=P1^4;
sbit KEY_ENTER=P1^5;
uchar m=0; //全局變量
uchar flag=0;
uchar set=0; /*功能鍵值*/
uchar code
2、dis1[]={" 2008 xuehao_xx "};
uchar code dis2[]={"name xxxxxx"};
uchar code dis3[] = {" SETA "};
uchar code dis4[] = {" SETB "};
//***************************************************************************
//延時子程序
//********************************************************************
3、*******
delay(int ms)
{
int i;
while (ms--)
{
for (i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
//***************************************************************************
//測試忙檢測
//***************************************************************
4、************
bit lcd_bz()
{
bit result;
LCD_RS=0;
LCD_RW=1;
LCD_EP=1;
delay(1);
result=(bit)(P2&0X80);
LCD_EP=0;
return result;
}
//***************************************************************************
////寫入指令到LCD中
//*****************************************************
5、**********************
lcd_wcmd(uchar cmd)
{
while (lcd_bz());
LCD_RS=0;
LCD_RW=0;
LCD_EP=0;
_nop_();
_nop_();
P2=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP=0;
}
//**********************************************
6、*****************************
////設(shè)置顯示位置
//***************************************************************************
lcd_pos(uchar POS)
{
lcd_wcmd(POS|0x80);
}
//***************************************************************************
////寫入字符顯示數(shù)據(jù)到LCD中去
//***************************
7、************************************************
lcd_wdat(uchar dat)
{
while(lcd_bz());
LCD_RS=1;
LCD_RW=0;
LCD_EP=0;
P2=dat;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP=0;
}
//*****************************************
8、**********************************
////初始化
//***************************************************************************
lcd_init()
{
lcd_wcmd(0x38);//功能設(shè)置
delay(12);
lcd_wcmd(0x0c);//顯示開/關(guān)控制
delay(12);
lcd_wcmd(0x06);//設(shè)置輸入模式
delay(12);
lcd_wcmd(0x01);//清屏
del
9、ay(12);
}
/******************************************************/
/*調(diào)整值函數(shù)*/
void adj_value()
{ m=0;
while(flag==1)
{if (KEY_UP==0)
{
delay(10);
if(KEY_UP==0)m++; //鍵值遞增
if(m>=10)m=0; //鍵值的范圍0~9
again:if(KEY_UP==0)goto again; //若按鍵未釋放,則等待
}
lcd_pos(0x4a);
lcd_wdat(0x3
10、0+m);
if(KEY_ENTER==1){delay(10);if(KEY_ENTER==1)flag=0;
again1:if(KEY_ENTER==1)goto again1;}
}
}
//********************************************
/***************************************************/
/*設(shè)置服務(wù)子函數(shù)*/
void set_value()
{
if (KEY_SET==0)
{
delay(10);
if(KEY_SE
11、T==0)set++;flag=0; //功能鍵值遞增
if(set>=3)set=0; //鍵值的范圍0~4
again:if(KEY_SET==0)goto again; //若按鍵未釋放,則等待
}
if(KEY_SET==1)flag=1;
}
/******************************************************/
/*第一頁函數(shù)*/
void fun_1()
{
uchar i;
delay(12);
lcd_pos(0);
i=0;
while(dis1[i]!='
12、\0')
{
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(0x40);
i=0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]);
i++;
}
}
//********************************************
/******************************************************/
/*第二頁函數(shù)*/
13、 void fun_2()
{
uchar i;
lcd_wcmd(0x01);//清屏
delay(12);
lcd_pos(0x40);
i=0;
while(dis3[i]!='\0')
{
lcd_wdat(dis3[i]);
i++;
}
adj_value();
}
/******************************************************/
/*第三頁函數(shù)*/
void fun_3()
{
14、 uchar i;
lcd_wcmd(0x01);//清屏
delay(12);
lcd_pos(0x40);
i=0;
while(dis4[i]!='\0')
{
lcd_wdat(dis4[i]);
i++;
}
adj_value();
}
//主函數(shù)
//************************************************
void main()
{
// uchar i;
lc
15、d_init();
delay(120);
P0=0xFF; //置P0 口
P2=0xFF; //置P2 口
lcd_wcmd(0x01);//清屏
fun_1();
while(1)
{
set_value();
switch(set) /*根據(jù)Set標志散轉(zhuǎn)*/
{
case 0:fun_1();break; /*第一頁*/
case 1:fun_2();break; /*第二頁*/
case 2:fun_3();break; /*第三頁*/
default:break;
}
}
}
原理圖: