標(biāo)題:
單片機(jī)+LCD12864一級菜單顯示源程序
[打印本頁]
作者:
^-^
時間:
2020-4-22 18:35
標(biāo)題:
單片機(jī)+LCD12864一級菜單顯示源程序
#include <reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar lcd_x,lcd_y,data_byte=0,count;
uint TH_data,TL_data,RH_data,RL_data,CK_data;
uint TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
uchar num,ldata=0,lold=1;
sbit RS = P2^0;//并行指令,數(shù)據(jù)選擇信號
sbit RW = P2^1;//讀寫信號
sbit EN = P2^2;//并行使能信號
sbit PSB = P2^3;//并串口選擇信號
sbit RST = P2^5;//復(fù)位信號
sbit key1 = P2^6; //定義按鍵1
sbit key2 = P2^7; //定義按鍵2
void delay(uint a);//延時函數(shù)
void delay0(unsigned int time);//延時函數(shù)
void LCD_init();//LCD初始化程序
void write_cmd(uchar cmd);//寫指令
void write_data(uchar dat);//寫數(shù)據(jù)
bit check_busy();//檢測LCD忙信號
void delay1();//10us延時
void lcd_dis_code(uint cmd_addr,uchar num,uchar dis[]);//顯示函數(shù)
uchar code lcd0[]={" 科協(xié)菜單"};
uchar code lcd1[]={"1:攝像頭"};
uchar code lcd2[]={"2:傳感器"};
uchar code lcd3[]={"3:液晶顯示"};
uchar code lcd4[]={"4:單片機(jī)"};
uchar code lcd5[]={"5:紅外傳感器"};
uchar code lcd6[]={"6:MAX232"};
uchar code lcd7[]={"7:晶振"};
uchar code lcd8[]={"8:單片機(jī)"};
uchar code lcd9[]={"9:紅外傳感器"};
uchar code lcd10[]={"10:MAX232"};
uchar code lcd11[]={"11:晶振"};
void main()
{
LCD_init();
while(1)
{ //循環(huán)掃描按鍵及顯示
if(key1==0)
{ //按鍵1按下
delay(5);
if(key1==0)
{ //是否是剛按下,是執(zhí)行,否則不執(zhí)行
ldata=ldata+1; //顯示數(shù)據(jù)加1
//lold=0; //處理完,將按鍵視為按下
}
}
else if(key2==0)
{ //按鍵2按下
delay(5);
if(key2==0){ //是否是剛按下,是執(zhí)行,否則不執(zhí)行
ldata--; //顯示數(shù)據(jù)減1
// lold=0; ////處理完,將按鍵視為按下
}
}
switch(ldata)
{
case 0:{
lcd_dis_code(0x80,10,lcd0);
lcd_dis_code(0x90,8,lcd1);
lcd_dis_code(0x88,8,lcd2);
lcd_dis_code(0x98,12,lcd3);
break;
}
case 1:{
lcd_dis_code(0x80,8,lcd4);
lcd_dis_code(0x90,12,lcd5);
lcd_dis_code(0x88,8,lcd6);
lcd_dis_code(0x98,5,lcd7);
break;
}
case 2:{
lcd_dis_code(0x80,8,lcd8);
lcd_dis_code(0x90,12,lcd9);
lcd_dis_code(0x88,9,lcd10);
lcd_dis_code(0x98,12,lcd11);
break;
}
}
}
}
void delay1()//延時10us
{
unsigned char i;
for(i=0; i<3; i++);
}
/**********************12864模塊程序**********************/
void lcd_dis_code(uint cmd_addr,uchar num,uchar dis[])
{
uint i;
write_cmd(cmd_addr);
for(i=0; i<num; i++)
write_data(dis[i]);
}
void LCD_init()
{
PSB = 1;
RST = 0;
delay(5);
RST = 1;
//write_cmd(0x34);//擴(kuò)充指令
delay(5);
write_cmd(0x30);//基本指令
//delay(5);
//write_cmd(0x0f);//顯示開關(guān)光標(biāo)
delay(5);
write_cmd(0x0c);
delay(10);
write_cmd(0x01);//清屏
delay(5);
write_cmd(0x06);
delay(20);
}
bit check_busy()
{
bit temp;
RS = 0;
RW = 1;
EN = 1;
delay(5);
temp = (bit)(P0&0x80); //按位與操作
EN = 0;
return (temp);
}
void write_cmd(uchar cmd)
{
while(check_busy());
RS = 0;
RW = 0;
EN = 0;
delay(5);
P0 = cmd;
delay(5);
EN = 1;
delay(5);
EN = 0;
}
void write_data(uchar dat)
{
while(check_busy());
RS = 1;
RW = 0;
EN = 0;
P0 = dat;
delay(5);
EN = 1;
delay(5);
EN = 0;
}
void delay(uint a)
{
uchar i;
while(a--)
{
for(i=0; i<113; i++);
}
}
void delay0(unsigned int time)
{
while(time--);
}
復(fù)制代碼
作者:
柯柯柯
時間:
2020-5-16 16:13
不錯,謝謝分享
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1