欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
幫忙看看lcd顯示程序有什么錯誤,lcd不顯示字符 求幫助
[打印本頁]
作者:
遲早要開葷
時間:
2019-4-8 17:57
標題:
幫忙看看lcd顯示程序有什么錯誤,lcd不顯示字符 求幫助
#include <reg52.h>
#include <intrins.h>
#include "main.h"
#define uchar unsigned char
#define uint unsigned int
/*LCD12864 端口定義*/
#define LCD_data P0 //數據口
sbit LCD_RS = P2^5; //寄存器選擇輸入
sbit LCD_RW = P2^6; //液晶讀/寫控制
sbit LCD_EN = P2^7; //液晶使能控制
sbit LCM_RST = P3^2;
//sbit LCD_PSB = P0^4; //串/并方式控制,部分液晶不需要
uchar code dis0[]=" IC卡門禁系統 ";
uchar code dis1[]="1.IC卡輸入 ";
uchar code dis2[]="2.密碼輸入:8位 ";
uchar code dis3[]="3.IC卡登記 ";
uchar code dis4[]="4.密碼設置:8位 ";
uchar code dis5[]="成功 ";
uchar code dis6[]="失敗 ";
void delay(int ms) //延時xms
{
while(ms--)
{
uchar i;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void delayNOP() //延時4us
{ _nop_(); _nop_(); _nop_(); _nop_();}
/*******************************************************************/
/* */
/*因為引腳的定義DB0..DB7是從P1.7...P1.0排列的 */
/*所以順序需要調換一下 */
/* */
/*******************************************************************/
INT8U swapbit(INT8U udata)
{
INT8U ii,tmp=0;
for(ii=0;ii<8;ii++)
{
tmp<<=1;
if(udata&0x01)
{
tmp|=0x01;
}
udata>>=1;
}
return tmp;
}
/*******************************************************************/
/* */
/*檢查LCD忙狀態 */
/*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。 */
/* */
/*******************************************************************/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(LCD_data&0x80);
LCD_EN = 0;
return(result);
}
/*******************************************************************/
/* */
/*寫指令數據到LCD */
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */
/* */
/*******************************************************************/
void write_cmd(unsigned char WCLCM,BuysC)
{
unsigned int K=20000;
while(lcd_busy() && K--); //預防沒插LCD時候停在這
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
LCD_data = swapbit(WCLCM);
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*******************************************************************/
/* */
/*寫顯示數據到LCD */
/*RS=H,RW=L,E=高脈沖,D0-D7=數據。 */
/* */
/*******************************************************************/
void lcd_wdat(unsigned char WDLCM)
{
unsigned int K=20000;
while(lcd_busy() && K--); //預防沒插LCD時候停在這
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
LCD_data= swapbit(WDLCM);
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*******************************************************************/
/* */
/* LCD初始化設定 */
/* */
/*******************************************************************/
void lcd_init()
{
// LCD_PSB = 1; //并口方式 ,部分液晶不需要
// LCM_RST =0;
write_cmd(0x36); //擴充指令操作
delay(5);
write_cmd(0x30); //基本指令操
delay(5);
write_cmd(0x0C); //顯示開,關光標
delay(5);
write_cmd(0x01); //清除LCD的顯示內容
delay(5);
}
/*********************************************************/
/* */
/* 設定顯示位置 */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
write_cmd(pos); //顯示地址
}
/*********************************************************/
/* */
/* 顯示主程序 */
/* */
/*********************************************************/
void display_all()
{
uchar i;
lcd_pos(0,0); //第一行顯示數字0~9
i = 0;
while(dis0[i] != '\0')
{
lcd_wdat(dis0[i]); //顯示字母
i++;
}
lcd_pos(1,0); //第二行顯示字母
i = 0;
while(dis1[i] != '\0')
{
lcd_wdat(dis1[i]); //顯示字母
i++;
}
lcd_pos(2,0); //第三行顯示文字
i = 0;
while(dis2[i] != '\0')
{
lcd_wdat(dis2[i]);
i++;
}
lcd_pos(3,0); //第四行顯示廣工無線電社
i = 0;
while(dis3[i] != '\0')
{
lcd_wdat(dis3[i]);
i++;
}
}
/*********************************************************/
/* */
/* 特定字符顯示主程序 */
/*
C:
0=" IC卡點臺燈 ";
1="1.讀卡中.... ";
2="2.登記.... ";
3="成功 ";
4="失敗 ";
/*********************************************************/
void display(uchar a,uchar b,uchar c)
{
uchar i;
lcd_pos(a,b); //第一行顯示數字0~9
i = 0;
switch(c)
{
case 0:
while(dis0[i] != '\0')
{
lcd_wdat(dis0[i]); //顯示字母
i++;
}
break;
case 1:
while(dis1[i] != '\0')
{
lcd_wdat(dis1[i]); //顯示字母
i++;
}
break;
case 2:
while(dis2[i] != '\0')
{
lcd_wdat(dis2[i]); //顯示字母
i++;
}
break;
case 3:
while(dis3[i] != '\0')
{
lcd_wdat(dis3[i]); //顯示字母
i++;
}
break;
case 4:
while(dis4[i] != '\0')
{
lcd_wdat(dis4[i]); //顯示字母
i++;
}
break;
case 5:
while(dis5[i] != '\0')
{
lcd_wdat(dis5[i]); //顯示字母
i++;
}
break;
case 6:
while(dis6[i] != '\0')
{
lcd_wdat(dis6[i]); //顯示字母
i++;
}
break;
default :break;
}
}
/*********************************************************/
/* */
/* 一般字符顯示主程序 */
/*
*p:內容
c:個數
/*********************************************************/
void display2(uchar a,uchar b,uchar *p,uchar num)
{
uchar i;
lcd_pos(a,b); //第一行顯示數字0~9
for(i=0;i<num;i++)
lcd_wdat(p[i]); //顯示字母
}
/********************
清除某一行
*********************/
void display_clear_line(uchar a)
{
uchar i;
lcd_pos(a,0);
for(i=0;i<16;i++)
lcd_wdat(' ');
復制代碼
作者:
linlincm
時間:
2019-12-10 10:23
請問你解決了嗎,我也遇到一樣的問題。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1