基于51单片机的太阳能电加热辅助系统II

来源:互联网 发布:新疆经济发展数据 编辑:程序博客网 时间:2024/06/08 03:13

接着昨天,接下来元器件的选择和原件使用的代码

首先,显示模块选择的是LCD1602;

一块能够接收信息的芯片就必须用时序的要求,要不然数据一通乱传!

                            

                                                                                            LCD1602读操作时序图

                

                 

                                                                   LCD1602写操作时序图

                                        

                                                   

                                                                                        LCD1602显示连接图

在接1602或者其他实际电路是,最好在输出电路中加上电阻,作为上拉或者下拉电阻,起到保护作用!

该模块代码如下:

#define Set_dataport_out
#define Set_dataport_in
#define LCD_data_out P0
#define LCD_data_in P0
#define Set_ctroport_out 
#define LCD_ctro_out P1
#define LCD_RS_ 0
#define LCD_RW_ 1
#define LCD_EN_ 1
#define LCD_RS(x)  if(!x) LCD_ctro_out&=~BIT(LCD_RS_);else LCD_ctro_out|=BIT(LCD_RS_);
#define LCD_RW(x)  if(!x) LCD_ctro_out&=~BIT(LCD_RW_);else LCD_ctro_out|=BIT(LCD_RW_);
#define LCD_EN(x)  if(!x) LCD_ctro_out&=~BIT(LCD_EN_);else LCD_ctro_out|=BIT(LCD_EN_);
void Write_command(uchar com);
void Write_data(uchar Data);
void LCD1602_init();
void LCD1602_display(uchar x,uchar y,uchar n,uchar *p);

/************************************************
*函数名称:write_com
*函数功能:写命令到1602
*函数参数:com
*返回值:  无
************************************************/
void Write_command(uchar com)
{
    
LCD_RS(0);
     LCD_RW(0);
LCD_data_out=com; 
delay_ms(1);
LCD_EN(1);
     delay_ms(1);
     LCD_EN(0);

}
/************************************************
*函数名称:write_data
*函数功能:写数据到1602
*函数参数:data
*返回值:  无
************************************************/
void Write_data(uchar Data)
{
     LCD_RS(1);
     LCD_RW(0);
LCD_data_out=Data; 
delay_ms(1);
LCD_EN(1);
     delay_ms(1);
     LCD_EN(0);

}
/************************************************
*函数名称:LCD1602_init
*函数功能:1602初始化
*函数参数:无
*返回值:  无
************************************************/
void LCD1602_init()
{
      
 Set_dataport_out;
      Set_ctroport_out;
 delay_ms(10);
      Write_command(0x38);//显示模式指令
 delay_ms(5);
 Write_command(0x01);//清屏指令
 delay_ms(5);
 Write_command(0x06);//显示闪烁光标
 delay_ms(5);
 Write_command(0x0c);//指针加一
 delay_ms(5);
}
/************************************************
*函数名称:LCD1602_display
*函数功能:在指定的显示位置显示字符串
*函数参数:
*返回值:  无
************************************************/
void LCD1602_display(uchar x,uchar y,uchar n,uchar *p)
{
    uchar i=0;
    uchar adress=0;
    if(!x)
    {
       adress=0x80+y; 
    }
    else 
    {
     adress=0xc0+y;
    }
    Write_command(adress);
for(i=0;i<n;i++)
{
    Write_data(p[i]);
}


}















0 0
原创粉丝点击