欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)+LCD12864液晶簡易菜單程序-c語言
[打印本頁]
作者:
020hub
時間:
2016-5-13 13:43
標(biāo)題:
單片機(jī)+LCD12864液晶簡易菜單程序-c語言
單片機(jī)+LCD12864液晶簡易菜單程序-c語言12864cd
單片機(jī) LCD12864液晶簡易菜單程序-c語言12864cd.rar
(1.78 KB, 下載次數(shù): 47)
2016-5-13 13:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
Index_Num 數(shù)組元素最大序號
Index 數(shù)組元素當(dāng)前序號
Index_P 選中項序號
Index_P_Pre 上一選中項序號,用于快速清理上次所畫下的圖案
*/
#include <reg52.h>
#include <intrins.h>
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
#define LCD_data P0 //數(shù)據(jù)口
#define Index_Num 8
typedef unsigned char uchar;
typedef unsigned int uint;
sbit Key1 = P1^0;
sbit Key2 = P1^1;
sbit LCD_RS = P2^6; //寄存器選擇輸入 cs
sbit LCD_RW = P2^5; //液晶讀/寫控制 sid
sbit LCD_EN = P2^7; //液晶使能控制 clk
sbit LCD_PSB = P3^2; //串/并方式控制
sbit LCD_RST = P3^7; //液晶復(fù)位端口
bdata uchar DataBuf;
uint Index,Index_P_Pre;
uint Index_P=0;
uchar code Weibo[][16]={"hello","呀咦 晗昱","weibo.com","/maixianyu","blog.163.com","maixianyu@126",
"123","456","789"};
////////////////////////////////////////////// 200us
void delay(int ms)
{
uchar t;
while(ms--)
{
for(t=0; t<20; t++) ;
}
}
//////////////////////////////////////////////////////////////////
void Lcd_Write_8bit(uchar msg){
uint i;
uchar DataBuffer;
DataBuffer=msg;
for(i=0;i<8;i++){
LCD_RW=(bit)(DataBuffer&0x80);
LCD_EN=1;
_nop_();
_nop_();
LCD_EN=0;
_nop_();
_nop_();
DataBuffer<<=1;
}
}
/////////////////////////////////////////
uchar Lcd_Rec(uint RS){
uint i;
uchar Data_H,Data_L;
LCD_RS=1;
if(RS)
Lcd_Write_8bit(0xfe);
else
Lcd_Write_8bit(0xfc);
delayNOP();
for(i=0;i<8;i++){
LCD_EN=1;
Data_H=(Data_H<<1)|LCD_RW;
LCD_EN=0;
}
delayNOP();
for(i=0;i<8;i++){
LCD_EN=1;
Data_L=(Data_L<<1)|LCD_RW;
LCD_EN=0;
}
LCD_RS=0;
DataBuf=(Data_H<<4)|Data_L;
return DataBuf;
}
/////////////////////////////////////////
bit Lcd_Busy(){
return Lcd_Rec(0)&0x80;
}
/////////////////////////////////////////
void Lcd_Write(uchar msg,uint dc){ //if dc equals 0,msg is a kind of cmd.
while(Lcd_Busy());
if(dc==0)
DataBuf=0xf8;
else
DataBuf=0xfa;
delayNOP();
LCD_RS=1;
Lcd_Write_8bit(DataBuf);
delayNOP();
DataBuf=msg&0xf0;
Lcd_Write_8bit(DataBuf);
delayNOP();
DataBuf=(msg<<4)&0xf0;
Lcd_Write_8bit(DataBuf);
LCD_RS=0;
}
////////////////////////////////////////////////////
void Disp_black() //清理上一次畫下的痕跡
{
uchar i,j;
Lcd_Write(0x34,0); //寫數(shù)據(jù)時,關(guān)閉圖形顯示
if(Index_P_Pre<2){
for(i=0+16*Index_P_Pre; i<16+16*Index_P_Pre; i++)
{
Lcd_Write(0x80+i,0);
Lcd_Write(0x80,0);
for(j=0;j<16;j++)
Lcd_Write(0x00,1);
}
}else{
for(i=0+16*(Index_P_Pre-2);i<16+16*(Index_P_Pre-2);i++)
{
Lcd_Write(0x80+i,0);
Lcd_Write(0x88,0);
for(j=0;j<16;j++)
Lcd_Write(0x00,1);
}
}
Lcd_Write(0x36,0); //寫完數(shù)據(jù),開圖形顯示
}
void convertChar(uchar CX) // 反白函數(shù)
{
uchar halfLineCnt, basicBlock,lcdPosX,lcdPosY;
// if(f==1)
Disp_black(); //清繪圖區(qū)
lcdPosY = 0x80;
if (CX == 0)
{
CX = 0x80;
halfLineCnt = 16;
}
else if (CX == 1)
{
CX = 0x80;
halfLineCnt = 32;
}
else if (CX == 2)
{
CX = 0x88;
halfLineCnt = 16;
}
else if (CX == 3)
{
CX = 0x88;
halfLineCnt = 32;
}
lcdPosX = CX;
for (; halfLineCnt != 0; halfLineCnt--)
{
basicBlock = 16;
Lcd_Write(0x34,0);
Lcd_Write(lcdPosY,0);
Lcd_Write(lcdPosX,0);
Lcd_Write(0x30,0);
for (;basicBlock != 0; basicBlock--)
{
if (halfLineCnt > 16)
{
Lcd_Write(0x00,1);
}
else
{
Lcd_Write(0xff,1);
}
}
lcdPosY++;
}
Lcd_Write(0x36,0);
Lcd_Write(0x30,0);
}
///////////////////////////////////////////////////
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_Write(pos,0);
}
///////////////////////////////////////////
void Lcd_Menu(uint Head){
uint j,i;
uint Index_End=Head+3;
// if(Index_End<=Index_Num){
for(j=0;Head<=Index_End;Head++,j++){
Lcd_Pos(j+1,0);
i=0;
while(i<15){
if(Weibo[Head][i]!=0)
Lcd_Write(Weibo[Head][i++],1);
else{
Lcd_Write(0x20,1);
i++;
}
}
delayNOP();
}
// }
}
///////////////////////////////////////////
void Lcd_Init(void){
LCD_PSB=0;
LCD_RST=0;
LCD_RS=0;
LCD_RW=1;
LCD_EN=0;
delay(2);
LCD_RST=1;
delay(2);
Lcd_Write(0x30,0); //ordinary cmd
delay(2);
Lcd_Write(0x0c,0); //how to show
delay(2);
Lcd_Write(0x01,0); //clear
delay(2);
}
/////////////////////////////////////////
void main(void){
Lcd_Init();
Key1=1;
Lcd_Menu(Index);
convertChar(Index_P);
while(1){
if(Key1==0&&Index>=0){
delay(5);
if(Key1==0&&Index>=0){
if(Index_P==0&&Index>0)
Lcd_Menu(--Index);
if(Index_P>0){
Index_P_Pre=Index_P;
convertChar(--Index_P);
}
}
}
if(Key2==0&&Index_P<=3){
delay(5);
if(Key2==0&&Index_P<=3){
if(Index_P==3&&Index<(Index_Num-3))
Lcd_Menu(++Index);
if(Index_P<3){
Index_P_Pre=Index_P;
convertChar(++Index_P);
}
}
}
}
}
復(fù)制代碼
作者:
sweetrong
時間:
2019-1-23 10:07
小媳婦謝謝分享
作者:
HYJ520
時間:
2019-6-3 18:34
有個小bug 怎么解決??
作者:
abc111111
時間:
2019-6-11 00:13
樓主,這個有個小問題呀呀呀!我還不會怎么表達(dá)
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1