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

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

LCD1602液晶顯示器 C51模塊化程序+電路圖

作者:huqin   來源:本站原創   點擊數:  更新時間:2014年10月24日   【字體:

下面是51單片機驅動1602液晶的電路圖:

程序一共有3個文件: 
 
/**********************
lcd.h 頭文件
**********************/
#ifndef _LCD_H_
#define _LCD_H_
#include <reg51.h>
extern void lcd_init();
extern void lcd_busy();
extern void lcd_write_dat(unsigned char dat);
extern void lcd_write_com(unsigned char dat);
extern void lcd_xy(unsigned char x,unsigned char y);
#endif
 


/**********************
 lcd.c 文件
**********************/
#include "lcd.h"
//#define uchar unsigned char
//#define uint unsigend int
#define port P0
unsigned char table[]="0123456789";
unsigned char table1[]="abcdefABCDEF";
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
/***********************************
  ***00000  5*7  -> 0xff
  *****0** /5*8     0x40
  *****0**    0x40  ----> I
  *****0**    0x40  ---->
  *****0**    0x40
  *****0**    0x40
  ***00000    0x1f
  添加自己的自定義字符
***********************************/
code unsigned char ziku[]=
{
0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00, //漢字“日”
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, //漢字“月”
0x01,0x02,0x03,0x05,0x09,0x03,0x00,0x00, //漢字“年”左半部
0x00,0x00,0x1e,0x08,0x08,0x1e,0x08,0x08  //漢字“年”右半部
};
/*****************
   讀取lcd1602狀態  
*****************/
unsigned char lcd_read()
{
  unsigned char temp;
  e=0;
  port=0xff;
  rs=0;
  rw=1;
  e=1;
  temp=port;
  e=0;
  return temp;
}
/***************************************
   檢測 lcd 是否忙碌  
***************************************/
void lcd_busy()
{
   unsigned char temp;
   do{
   temp=lcd_read();
     }while((temp&0x80)==0x80);
}
/*****************************************
      向lcd里寫命令
*****************************************/
void lcd_write_com(unsigned char dat)
{
lcd_busy();
 e=0;
port=dat;
 rs=0;
 rw=0;
 e=1;
 e=0;
}
/***************************************
   讀取lcd對應地址數據
*****************************************/
unsigned char lcd_read_dat()
{
  unsigned char temp;
  lcd_busy();
  e=0;
  port=0xff;
  rs=1;
  rw=1;
  e=1;
  temp=port;
  e=0;
  return temp;
}
/****************************************
       向lcd里寫數據
****************************************/
void lcd_write_dat(unsigned char dat)
{
lcd_busy();
 e=0;
port=dat;
 rs=1;
 rw=0;
 e=1;
 e=0;
}
/****************************************
     向lcd寫字符串
*****************************************/
void lcd_gets(char *dat)
{
 while(*dat!=0)
 {
 
 lcd_write_dat(*dat);
 dat++;
 }
}
/*****************************************
      確定要寫的位子即x y 坐標
******************************************/
void lcd_xy(unsigned char x,unsigned char y)
{
 switch(y)
 {
  case 0:lcd_write_com(0x80+x);break;//第一行第X個位置
  case 1:lcd_write_com(0xc0+x);break;//0xc0==0x80+0x50 第二行第X個位置
  case 2:lcd_write_com(0x94+x);break;//
  case 3:lcd_write_com(0xd4+x);break;//4*20
 }
}
/****************************************************
 單行顯示才有5*10  其他5*8 MODE=1 5*8  MODE=0 5*10
****************************************************/
add_custom_word(unsigned char *dat,unsigned char len,unsigned char mode)
 {
  unsigned char n,m;
  for(n=0;n<len;n++)
    {
  if(mode)
  {
   lcd_write_com(0x40+8*n);
    for(m=0;m<8;m++)
       {
    lcd_write_dat(*dat);
     dat++;
    }
   }
   else
    {
    lcd_write_com(0x40+10*n);
    for(m=0;m<10;m++)
       {
    lcd_write_dat(*dat);
     dat++;
    }
   }
 }
 }
/********************************************
   初始化lcd
********************************************/
void lcd_init()
{
 lcd_write_com(0x01) ;//清屏
 lcd_write_com(0x03) ;
 lcd_write_com(0x3c) ;
 lcd_write_com(0x40) ;
 lcd_write_com(0x0c) ;
 add_custom_word(ziku,4,1); //初始化自定義字符
}
/********************************************
   1ms 為基本單位的延時函數
********************************************/
void delay(unsigned char z)
{
  unsigned char x,y,a;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--)
   for(a=1;a>0;a--) ;
}
 


/******************************************
 main.c 主文件
******************************************/
#include<reg51.h>
#include"lcd.h"
main()
{
 lcd_init();
 lcd_busy();
 lcd_xy(6,0);
 lcd_write_dat('b');
 
 while(1);
}

 

 

 

關閉窗口
主站蜘蛛池模板: 中文字幕在线免费视频 | 久久久91精品国产一区二区精品 | 玖玖国产 | 久久久久久久久精 | 中文字幕1区2区 | 色久伊人 | 99热.com| 日韩欧美在 | 男插女下体视频 | 久久99精品久久久久久狂牛 | 久久狼人天堂 | 亚洲美女一区二区三区 | 亚洲精品一区二三区不卡 | 涩涩鲁亚洲精品一区二区 | 一级全黄少妇性色生活免费看 | 国产综合精品一区二区三区 | 日韩精品一区二区三区 | 九色一区| 国产女人精品视频 | 久久99精品久久久 | 日批的视频 | 成人激情视频 | 国产激情一区二区三区 | 久久久毛片 | 亚洲精品日韩欧美 | 国产激情视频在线免费观看 | 久久国产精品99久久久大便 | 欧美一区二区三区在线 | av在线天堂 | 91传媒在线观看 | 国产一区二区在线免费观看 | 国产1区2区在线观看 | 天堂久久久久久久 | 99精品欧美一区二区蜜桃免费 | 99福利视频导航 | 婷婷久久五月 | 超碰成人av| 日韩中文字幕一区 | 亚洲精品无 | 成人免费视频久久 | 激情视频中文字幕 |