51单片机1602-1

/**************************************************************************************                                                                                
*                      LCD1602液晶显示实验                                                  *                        
实现现象:下载程序后插上LCD1602液晶在开发板上,即可显示                                                                                
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。                                                                                  
***************************************************************************************/                                                                                
                                                                                
#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器                                                                    
#include "lcd.h"                                                                                
                                                                                
typedef unsigned int u16;      //对数据类型进行声明定义                                                                            
typedef unsigned char u8;                                                                                
                                                                                
u8 Disp[]=" Pechin Science ";                                                                                
                                                                                
/*******************************************************************************                                                                                
* 函 数 名         : main                                                                                
* 函数功能           : 主函数                                                                        
* 输    入         : 无                                                                                
* 输    出         : 无                                                                                
*******************************************************************************/                                                                                
void main(void)                                                                                
{                                                                                
    u8 i;                                                                            
    LcdInit();                                                                            
    for(i=0;i<16;i++)                                                                            
    {                                                                            
        LcdWriteData(Disp[i]);                                                                        
    }                                                                            
    while(1);                                                                            
}                                                                                
  1 #include "lcd.h"                        
  2                         
  3 /*******************************************************************************                        
  4 * 函 数 名         : Lcd1602_Delay1ms                        
  5 * 函数功能           : 延时函数,延时1ms                
  6 * 输    入         : c                        
  7 * 输    出         : 无                        
  8 * 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。                        
  9 *******************************************************************************/                        
 10                         
 11 void Lcd1602_Delay1ms(uint c)   //误差 0us                        
 12 {                        
 13     uchar a,b;                        
 14     for (; c>0; c--)                    
 15     {                    
 16          for (b=199;b>0;b--)                
 17          {                
 18               for(a=1;a>0;a--);            
 19          }                      
 20     }                    
 21                             
 22 }                        
 23                         
 24 /*******************************************************************************                        
 25 * 函 数 名         : LcdWriteCom                        
 26 * 函数功能           : 向LCD写入一个字节的命令                
 27 * 输    入         : com                        
 28 * 输    出         : 无                        
 29 *******************************************************************************/                        
 30 #ifndef     LCD1602_4PINS     //当没有定义这个LCD1602_4PINS时                
 31 void LcdWriteCom(uchar com)      //写入命令                    
 32 {                        
 33     LCD1602_E = 0;     //使能                    
 34     LCD1602_RS = 0;       //选择发送命令                
 35     LCD1602_RW = 0;       //选择写入                
 36                         
 37     LCD1602_DATAPINS = com;     //放入命令                    
 38     Lcd1602_Delay1ms(1);        //等待数据稳定            
 39                         
 40     LCD1602_E = 1;              //写入时序                
 41     Lcd1602_Delay1ms(5);      //保持时间                
 42     LCD1602_E = 0;                    
 43 }                        
 44 #else                         
 45 void LcdWriteCom(uchar com)      //写入命令                    
 46 {                        
 47     LCD1602_E = 0;     //使能清零                
 48     LCD1602_RS = 0;     //选择写入命令                
 49     LCD1602_RW = 0;     //选择写入                
 50                         
 51     LCD1602_DATAPINS = com;    //由于4位的接线是接到P0口的高四位,所以传送高四位不用改                
 52     Lcd1602_Delay1ms(1);                    
 53                         
 54     LCD1602_E = 1;     //写入时序                
 55     Lcd1602_Delay1ms(5);                    
 56     LCD1602_E = 0;                    
 57                         
 58     LCD1602_DATAPINS = com << 4; //发送低四位                    
 59     Lcd1602_Delay1ms(1);                    
 60                         
 61     LCD1602_E = 1;     //写入时序                
 62     Lcd1602_Delay1ms(5);                    
 63     LCD1602_E = 0;                    
 64 }                        
 65 #endif                        
 66 /*******************************************************************************                        
 67 * 函 数 名         : LcdWriteData                        
 68 * 函数功能           : 向LCD写入一个字节的数据                
 69 * 输    入         : dat                        
 70 * 输    出         : 无                        
 71 *******************************************************************************/                           
 72 #ifndef     LCD1602_4PINS                       
 73 void LcdWriteData(uchar dat)            //写入数据            
 74 {                        
 75     LCD1602_E = 0;    //使能清零                
 76     LCD1602_RS = 1;    //选择输入数据                
 77     LCD1602_RW = 0;    //选择写入                
 78                         
 79     LCD1602_DATAPINS = dat; //写入数据                    
 80     Lcd1602_Delay1ms(1);                    
 81                         
 82     LCD1602_E = 1;   //写入时序                    
 83     Lcd1602_Delay1ms(5);   //保持时间                    
 84     LCD1602_E = 0;                    
 85 }                        
 86 #else                        
 87 void LcdWriteData(uchar dat)            //写入数据            
 88 {                        
 89     LCD1602_E = 0;      //使能清零                
 90     LCD1602_RS = 1;      //选择写入数据                
 91     LCD1602_RW = 0;      //选择写入                
 92                         
 93     LCD1602_DATAPINS = dat;    //由于4位的接线是接到P0口的高四位,所以传送高四位不用改                
 94     Lcd1602_Delay1ms(1);                    
 95                         
 96     LCD1602_E = 1;      //写入时序                
 97     Lcd1602_Delay1ms(5);                    
 98     LCD1602_E = 0;                    
 99                         
100     LCD1602_DATAPINS = dat << 4; //写入低四位                    
101     Lcd1602_Delay1ms(1);                    
102                         
103     LCD1602_E = 1;      //写入时序                
104     Lcd1602_Delay1ms(5);                    
105     LCD1602_E = 0;                    
106 }                        
107 #endif                        
108 /*******************************************************************************                        
109 * 函 数 名       : LcdInit()                        
110 * 函数功能         : 初始化LCD屏                
111 * 输    入       : 无                        
112 * 输    出       : 无                        
113 *******************************************************************************/                           
114 #ifndef        LCD1602_4PINS                
115 void LcdInit()                          //LCD初始化子程序
116 {                        
117      LcdWriteCom(0x38);  //开显示                    
118     LcdWriteCom(0x0c);  //开显示不显示光标                    
119     LcdWriteCom(0x06);  //写一个指针加1                    
120     LcdWriteCom(0x01);  //清屏                    
121     LcdWriteCom(0x80);  //设置数据指针起点                    
122 }                        
123 #else                        
124 void LcdInit()                          //LCD初始化子程序
125 {                        
126     LcdWriteCom(0x32);     //将8位总线转为4位总线                
127     LcdWriteCom(0x28);     //在四位线下的初始化                
128     LcdWriteCom(0x0c);  //开显示不显示光标                    
129     LcdWriteCom(0x06);  //写一个指针加1                    
130     LcdWriteCom(0x01);  //清屏                    
131     LcdWriteCom(0x80);  //设置数据指针起点                    
132 }                        
133 #endif                        
#ifndef __LCD_H_                        
#define __LCD_H_                        
/**********************************                        
当使用的是4位数据传输的时候定义,                        
使用8位取消这个定义                        
**********************************/                        
#define LCD1602_4PINS                        
                        
/**********************************                        
包含头文件                        
**********************************/                        
#include<reg52.h>                        
                        
//---重定义关键词---//                        
#ifndef uchar                        
#define uchar unsigned char                        
#endif                        
                        
#ifndef uint                         
#define uint unsigned int                        
#endif                        
                        
/**********************************                        
PIN口定义                        
**********************************/                        
#define LCD1602_DATAPINS P0                        
sbit LCD1602_E=P2^7;                        
sbit LCD1602_RW=P2^5;                        
sbit LCD1602_RS=P2^6;                        
                        
/**********************************                        
函数声明                        
**********************************/                        
/*在51单片机12MHZ时钟下的延时函数*/                        
void Lcd1602_Delay1ms(uint c);   //误差 0us                        
/*LCD1602写入8位命令子函数*/                        
void LcdWriteCom(uchar com);                        
/*LCD1602写入8位数据子函数*/                        
void LcdWriteData(uchar dat)    ;                    
/*LCD1602初始化子程序*/                        
void LcdInit();                          
                        
#endif                        

猜你喜欢

转载自www.cnblogs.com/clam-hao/p/10076688.html