找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1270|回复: 0
收起左侧

1602显示程序

[复制链接]
ID:117256 发表于 2016-4-28 11:37 | 显示全部楼层 |阅读模式
#include<reg51.h>
#include<intrins.h>

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位长度) */

sbit LCD_RS = P0^7;            
sbit LCD_RW = P0^6;
sbit LCD_EN = P0^5;

sbit 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[i]!='\0';i++)
  {
    LCD1602_WriteChar(x,y++,String[i]);
  }
}

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

39.58 KB, 下载次数: 6, 下载积分: 黑币 -5

1602显示程序

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表