⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcmtemp.c

📁 已经调试通过的利用温度传感器18B20实现温度测量
💻 C
📖 第 1 页 / 共 2 页
字号:

/*==================================*/
/*          读状态,等待空闲         */
/*==================================*/
void read_1602_status(void)
{
LCM1602_DATA=0xFF; 
LCM1602_RS=0;
LCM1602_RW=1;
LCM1602_E=0;
LCM1602_E=0;
LCM1602_E=1;
while(LCM1602_DATA&busy); //检测忙信号
}

/*==============================================================*/
/*                   LCM初始化                                  */
/*==============================================================*/
void initialize_1602(void) 
{
write_1602_command(0x38,0); //三次显示模式设置,不检测忙信号
delay1602(10); 
write_1602_command(0x38,0);
delay1602(10); 
write_1602_command(0x38,0);
delay1602(10); 
write_1602_command(0x38,1); //显示模式设置,开始要求每次检测忙信号
write_1602_command(0x08,1); //关闭显示
write_1602_command(0x01,1); //显示清屏
write_1602_command(0x06,1); // 显示光标移动设置
write_1602_command(0x0C,1); // 显示开及光标设置
}

/*==================================================================================*/
/*                    按指定位置显示一个字符                                        */
/*==================================================================================*/
void display_1602_onechar(unsigned char x, unsigned char y, unsigned char d)  
                                   //x表示列、y 表示行
{
y &= 0x1;
x &= 0xF;               //限制x不能大于15,y不能大于1
if (y) x |= 0x40;       //当要显示第二行时地址码+0x40;
x |= 0x80;              // 算出指令码
write_1602_command(x,0);  //这里不检测忙信号,发送地址码
write_1602_data(d);
}

/*================================================================================*/
/*                      按指定位置显示一串字符                                    */
/*================================================================================*/
void display_1602_listchar(unsigned char x, unsigned char y, unsigned char *d)
{
unsigned char ListLength;
ListLength=0;
y &= 0x1;
x &= 0xF;                      //限制x不能大于15,y不能大于1
while (d[ListLength]>=0x20&&ListLength<16) //若到达字串尾则退出
  {
   if (x <= 0xF)                //x坐标应小于0xF(15)
    {
     display_1602_onechar(x, y, d[ListLength]); //显示单个字符
     x++;
    }
    ListLength++;
  }
}

//===============光标开关==================
/*void cursor_1602(unsigned char work)
{
    if(work==1)write_1602_command(0x0f,1);
    else if(work==0)write_1602_command(0x0c,1);
}
*/
//=========================================

//================清屏=====================
/*void clear_1602()
{
    write_1602_command(0x01,0);
}
*/

//=========================================

//==============延时=======================
void delay1602(unsigned char t)
{
    unsigned int i,j;
    for(i=0;i<t;i++)
    for(j=0;j<200;j++);
}
//=========================================
                                                                        
/*======================================================================================================================*/
/*  	                                 在指定的位置显示数字num                                                        */
/*======================================================================================================================*/
/*void display_1602_num(unsigned char x,unsigned char y,long int num)
{
    long int n=num; //复制num以便操作
    unsigned char cnum[]={' ',' ',' '}; //字符串cnum用于存放num各位数字的
    char i,l;
    if(num<0)n=-num;    //若num<0,n取反
    while(1)    //计算数字长度l
    {
        if(n>0){n/=10;l++;}
        else break;
    }
    if(num>=0)n=num;
    else n=-num;
    if(num<0){cnum[x]='-';x++;}    //若num<0,则在x处写入负号,然后在x+1处显示数字
    for(i=l-1;i>=0;i--)                 //num各位数存入cnum,最高位放在cnum[x];
    {
        cnum[x+i]=n%10+48;
        n/=10;
    }
    display_1602_listchar(0,y,cnum);    //显示num
} */
/*=======================================================================================================================*/


/*===========================================================================*/
/*函数功能:循环左(右)移动屏幕上的所有字符                                    */
/*参数说明:time为每移动一格时所需要的时间,direction为移动方向:0为左移,1为右移*/
/*===========================================================================*/
/*void movesreen_1602_rl(unsigned int time,unsigned char direction)
{
    unsigned int i=0;
    for(i=0;i<16;i++)
    {    
        if(direction==0)   
        write_1602_command(0x18,1);
        else if(direction==1)
        write_1602_command(0x1c,1);
        for(i=0;i<time;i++)
        delay1602(10);
    }
}

/*======================================================================*/
/*            以左移动的方式在第一行显示长于16字节的字符串              */
/*======================================================================*/
/*void movedata_1602_left(unsigned char *d)
{
    unsigned int i=0,j=0,k=15,x=0,L=0;
    for(;j<15;j++)
    {
        for(i=0;i<=j;i++)
        {
            display_1602_onechar(15-j+i,0,d[i]);
        }
        delay1602(100);
    }
    i=0;
    while(d[i+15]>=0x20) //若到达字串尾则退出,后16字符交给下一个循环处理
    {
        for(x=0;x<16;x++,L++)
        display_1602_onechar(x, 0, d[L+i]); //显示单个字符      
        delay1602(100);
        L-=16;
        i++;
    };
    for(i=0;i<16;i++)//处理剩下的16个字符
    {    
        write_1602_command(0x18,1);
        delay1602(100);
    }
}

/*=======================================*/
/*      以逐行上移的方式显示文章         */
/*=======================================*/
/*void movedata_1602_up(unsigned char *d)
{
    unsigned int i=0,j=0,k=0,work=0;
    unsigned char Data1[16],Data2[16];
    for(j=0;work==0;j+=16)
    {
        for(i=0;i<16;i++)
        {
            Data1[i]=d[i+j];
            Data2[i]=d[i+16+j];
            if(work)Data2[i]=' ';
            if(Data2[i]<0x20){work=1;Data2[i]=' ';}
             //最后一行没有字符的地方填满空格
        }
        
        display_1602_listchar(0,0,Data1);
        display_1602_listchar(0,1,Data2);
        for(k=0;k<5;k++)delay1602(100);
    }
    display_1602_listchar(0,0,Data2);
    display_1602_listchar(0,1,"                ");
    for(k=0;k<5;k++)delay1602(100);
    write_1602_command(0x01,1);//显示完最后一行后清0
}


/*================================================*/
/*              以翻页的方式显示文章              */
/*================================================*/
/*void turnpage_1602(unsigned char *d)
{
    unsigned int i=0,j=0,k=0,work=0;
    unsigned char Data1[16],Data2[16];
    for(j=0;work==0;j+=32)
    {
        for(i=0;i<16;i++)
        {
            Data1[i]=d[i+j];
            Data2[i]=d[i+16+j];
            if(work==1)Data2[i]=' ';
            if(work==2)Data1[i]=' ';
            if(Data2[i]<0x20){work=1;Data2[i]=' ';}
            if(Data1[i]<0x20){work=2;Data1[i]=' ';}
        }
        display_1602_listchar(0,0,Data1);
        display_1602_listchar(0,1,Data2);
        for(k=0;k<5;k++)delay1602(100);
    }
    write_1602_command(0x01,1);//显示完最后一行后清0
}
*/







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -