久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

LCD1602.H(51單片機LCD1602顯示驅動程序)

作者:串亖の六花   來源:本站原創   點擊數:  更新時間:2014年04月28日   【字體:

 

 
 
/*無敵高氯酸修改
 
  函數功能
  delay_ms(time)  延時time毫秒
  LCD_init()      初始化清空LCD屏
  LCD_print(x,y,str)在(x,y)坐標上顯示str字符       0=<x=<15     y=0或者1
*/
/*定義端口*********************************************************/
#define Port P2 //數據端口
sbit Rs = P0^7;     /*LCD 第四腳*/
sbit Rw = P0^6;     /*LCD 第五腳*/
sbit En = P0^5;  /*LCD 第六腳*/
 
/*定義類型*/
#define uchar unsigned char
#define uint unsigned int
   
/*定義LCD控制字*****************************************************/
//清屏及光標歸位
#define LCD_CLEAR 0x01 // 清屏
#define LCD_HOMING 0x02 // 光標返回左上角
//顯示開關控制指令
#define LCD_SCREEN_ON 0x0C //顯示開
#define LCD_SCREEN_OFF 0x08 //顯示關
#define LCD_CURSOR_ON 0x0A //顯示光標
#define LCD_CURSOR_OFF 0x08 //無光標
#define LCD_C_FLASH_ON 0x09 //光標閃動
#define LCD_C_FLASH_OFF 0x08 //光標不閃動
//進入模式設置指令
#define LCD_AC_UP 0x06 //新數據后光標右移
#define LCD_AC_DOWN 0x04 //新數據后光標左移
#define LCD_S_MOVE_ON 0x05 // 畫面可平移
#define LCD_S_MOVE_OFF 0x04 //畫面不可平移
//設定顯示屏或光標移動方向指令
#define LCD_C_LEFT 0x10 //光標左移1格,且AC值減1
#define LCD_C_RIGHT 0x11 //光標右移1格,且AC值加1
#define LCD_CHAR_LEFT 0x18 //顯示器上字符全部左移一格,但光標不動
#define LCD_CHAR_RIGHT 0x1C //顯示器上字符全部右移一格,但光標不動
uchar code number[10]={"0123456789"};
/*所有函數聲明*********************************************************/
void LCD_init(void);
void LCD_wdata(uchar wdata);
void LCD_wcommand(uchar lcd_cmd,busy_f);
void LCD_gotoxy(uchar x,uchar y);
void LCD_print(uchar x,uchar y,uchar *str);
uchar Rstatus(void);
uchar LCD_rdata(void);
void delay_ms(unsigned int n)  {
    unsigned int i=0,j=0;
    for (i=n;i>0;i--)
     for (j=0;j<1140;j++); 
}
  /*********************************************************************
函數名稱:LCD_print()
功能描述:顯示字符或字符串
入口參數:字符或字符串
返回值:無
**********************************************************************/
void LCD_print(uchar x,uchar y,uchar *str)
{
LCD_gotoxy(x,y);
while(*str!='\0')
{
LCD_wdata(*str);
str++;
}
}
 
/*
********************************************************************
函數名稱:LCD_wcommand()
功能描述:LCD寫指令
入口參數:uchar lcd_cmd:命令字,uchar busy_f:忙檢測標志位
返回值:無
********************************************************************
*/
void LCD_wcommand(uchar lcd_cmd,busy_f)
{
if (busy_f) Rstatus(); //不忙才執行下個程序
Port = lcd_cmd;
Rs = 0;
Rw = 0;
En = 0;
En = 0;
En = 1;
}
/*********************************************************************
函數名稱:LCD_wdata()
功能描述:LCD寫數據
入口參數:uchar wdata:所寫數據
返回值:無
*********************************************************************/
void LCD_wdata(uchar wdata)
{
Rstatus();
Port = wdata;
Rs = 1;
Rw = 0;
En = 0; //若晶振速度太高可以在這后加小的延時
En = 0; //延時
En = 1;
}
/*********************************************************************
函數名稱:LCD_rdata()
功能描述:LCD讀數據
入口參數:無
返回值:所讀數據
*********************************************************************/
uchar LCD_rdata(void)
{
Rs = 1;
Rw = 1;
En = 0;
En = 0;
En = 1;
return Port;
}
/*********************************************************************
函數名稱:Rstatus()
功能描述:LCD讀忙狀態
入口參數:無
返回值:若忙,則等待,不忙則返回Port
*********************************************************************/
uchar Rstatus(void)
{
Port = 0xFF;
Rs = 0;
Rw = 1;
En = 0;
En = 0;
En = 1;
while (Port & 0x80); //檢測忙信號,不忙則退出等待
return(Port);
}
/*********************************************************************
函數名稱:LCD_init()
功能描述:LCD初始化
入口參數:無
返回值:無
*********************************************************************/
void LCD_init(void)
{
Port = 0;
LCD_wcommand(0x38,0); //三次顯示模式設置,不檢測忙信號
delay_ms(3);
LCD_wcommand(0x38,0);
delay_ms(3);
LCD_wcommand(0x38,0);
delay_ms(3);
LCD_wcommand(0x38,1); //顯示模式設置(0X38雙行(5*7),0X34單行(5*10)),0X30單行(5*7);開始要求每次檢測忙信號
LCD_wcommand(0x08,1); //關閉顯示
LCD_wcommand(0x01,1); //顯示清屏
LCD_wcommand(0x06,1); // 顯示光標移動設置
LCD_wcommand(0x0C,1); // 顯示開及光標設置
}
 
/*********************************************************************
函數名稱:LCD_gotoxy()
功能描述:定位到(x,y)位置
入口參數:x為行(0~1),y為列(0~15)
返回值:無
*********************************************************************/
void LCD_gotoxy(uchar x, uchar y)
{
x &= 0x1; //限制x不能大于1,y不能大于15
y &= 0xF;
if(!x) LCD_wcommand(0x80|y,1);
else LCD_wcommand(0xC0|y,1);
}
 
關閉窗口

相關文章

主站蜘蛛池模板: 国产欧美视频在线观看 | 欧美又大又硬又粗bbbbb | 成人在线播放视频 | 91精品又粗又猛又爽 | 国产一二区 | 午夜黄色剧场 | 天天久久| 91精品国产一区二区三区 | www.国产一区| 国产乱国产乱300精品 | 亚洲资源在线观看 | 国产一区二区三区免费 | av怡红院| www.国产精品| 一区二区在线视频 | 久热中文字幕 | 综合久久99 | 手机福利视频 | 日韩一区二区三区视频 | 中国a一片一级一片 | 精品免费国产一区二区三区四区 | 一级免费毛片 | 影音先锋中文字幕在线 | 欧美一区视频 | www.亚洲成人 | 在线观看日本 | 久草视频免费在线观看 | 91久色| 欧美在线观看一区 | 免费av在线网站 | 精品国产三级 | 精品一区视频 | 久久国产欧美 | 亚洲精品久久久久久久久 | 午夜成人影片 | 三级网站在线播放 | 国产又粗又黄又爽又硬的视频 | 一区二区三区国产精品 | 亚洲亚洲人成综合网络 | 久久艹国产 | 成人精品在线观看 |