单片机学习小组
直播中

白旭蕊

7年用户 201经验值
私信 关注

1602显示程序资料下载

#include
#include

typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable           无符号8位整型变量  */
typedef signed   char  S8;       /* defined for signed 8-bits integer variable                  有符号8位整型变量  */
typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable           无符号16位整型变量 */
typedef signed   int   S16;      /* defined for signed 16-bits integer variable           有符号16位整型变量 */
typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable           无符号32位整型变量 */
typedef signed   long  S32;      /* defined for signed 32-bits integer variable           有符号32位整型变量 */
typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedef double         F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */

***it LCD_RS = P0^7;            
***it LCD_RW = P0^6;
***it LCD_EN = P0^5;

***it LED = P1^0;



#define Data P2
#define   Data_0_time    4

//独立按键接口 可自行修改






/*****************
函数名称:delay();
函数功能:粗略延时
******************/
void delay1(U16 i)
{
         U16 j,k;         
         for(j=i;j>0;j--)
         for(k=125;k>0;k--);
}

void DelayUs2x(U8 t)
{   
         while(--t);
}

void DelayMs(U8 t)
{

     while(t--)
     {
      //大致延时1mS
        DelayUs2x(245);
        DelayUs2x(245);
     }
}

void Delay(U16 j)
{     
          U8 i;
          for(;j>0;j--)
          {         
                 for(i=0;i<27;i++);

          }
}
void  Delay_10us(void)
{
    U8 i;
    i--;
    i--;
    i--;
    i--;
    i--;
    i--;
}


/*****************
函数名称:bit lcd_busy()
函数功能:检查LCD忙状态
输入值  :无
返回值  :
******************/
bit lcd_busy()
{                          
     bit result;
     LCD_RS = 0;
     LCD_EN = 1;
     delay1(1);
     result = (bit)(Data&0x80);
     LCD_EN = 0;
     return(result);
}
/*****************
函数名称:void LCD1602_WriteCmd(unsigned char cmd)
函数功能:写指令数据到LCD
输入值  :指令
返回值  :无
******************/
void LCD1602_WriteCmd(unsigned char cmd)
{                          
     LCD_RS = 0;
     LCD_EN = 0;
     delay1(1);
     Data = cmd;
     delay1(5);
     LCD_EN = 1;
     delay1(5);
     LCD_EN = 0;
     delay1(10);
}


/*****************
函数名称:void LCD1602_WriteData(unsigned char dat)
函数功能:写显示数据到LCD  
输入值  :数据
返回值  :无
******************/
void LCD1602_WriteData(U8 dat)
{                          
     LCD_RS = 1;
     LCD_EN = 0;
     Data = dat;
     delay1(1);
     LCD_EN = 1;
     delay1(1);
     LCD_EN = 0;
     delay1(10);
}

/*****************
函数名称:void lcd_init(void)
函数功能:LCD1602初始化函数  
输入值  :无
返回值  :无
******************/
void lcd_init(void)
{   
     LCD_RW = 0;
     delay1(15);   
     LCD1602_WriteCmd(0x01);      //清除LCD的显示内容            
     LCD1602_WriteCmd(0x38);      //16*2显示,5*7点阵,8位数据
     delay1(5);
     LCD1602_WriteCmd(0x38);         
     delay1(5);
     LCD1602_WriteCmd(0x38);         
     delay1(5);

     LCD1602_WriteCmd(0x0c);      //开显示,不显示光标  
     delay1(5);

     LCD1602_WriteCmd(0x01);      //清除LCD的显示内容
     delay1(5);
}

/*****************
函数名称:void LCD1602_WriteChar(unsigned char x,unsigned char y,unsigned char Dat)
函数功能:写单个字符到指定坐标  
输入值  :x:行 (可取0~1) y:列 (可取0~15) Dat:为要显示的数据
返回值  :无
******************/
void LCD1602_WriteChar(U8 x,U8 y,U8 Dat)
{
   if(x==0)
   {
     LCD1602_WriteCmd(0x80+y);
     LCD1602_WriteData(Dat);
     delay1(5);
   }
   if(x != 0)
   {
     LCD1602_WriteCmd(0x80+0x40+y);
     LCD1602_WriteData(Dat);
     delay1(5);
   }
}
/*****************
函数名称:void LCD1602_WriteChar(unsigned char x,unsigned char y,unsigned char Dat)
函数功能:写字符串到指定坐标    (x,y)为首个字符的显示位置  
输入值  :x:行 (可取0~1) y:列 (可取0~15) Dat:为要显示的数据
返回值  :无
******************/
void LCD1602_WriteString(U8 x,U8 y,U8 *String)
{
   U8 i;
   for(i=0;String!='\0';i++)
   {
     LCD1602_WriteChar(x,y++,String);
   }
}

void init(void)
{
     TMOD = 0x20;          //定时器T1使用工作方式2
         TH1 = 253;        // 设置初值
         TL1 = 253;
         TR1 = 1;          // 开始计时
         SCON = 0x50;          //工作方式1,波特率9600bps,允许接收   
         ES = 1;
         EA = 1;           // 打开所以中断   

}


void main(void)
{
         int a;
         lcd_init();        
         init();        
         
         while (1)
          {
            LCD1602_WriteString(0,0,"GangBanHou:");
            LCD1602_WriteString(1,3,"mm");
            LCD1602_WriteChar(1,0,'f');
            a++;
            DelayMs(500);
            LCD1602_WriteChar(1,1,a+'0');
           
         }
}


        1602显示程序.zip
  2016-4-28 11:35 上传
点击文件名下载附件



39.58 KB, 下载次数: 3
  
1602显示程序

更多回帖

发帖
×
20
完善资料,
赚取积分