void LCD_PutString(unsigned char x,unsigned char y,unsigned char *s) { switch(y) { case 1: Write_Cmd(0x80+x);break; case 2: Write_Cmd(0x90+x);break; case 3: Write_Cmd(0x88+x);break; case 4: Write_Cmd(0x98+x);break; default:break; } while(*s>0) { Write_Data(*s); s++; DelayUs2x(50); } }
时间: 2023-12-06 18:41:11 浏览: 127
这段代码是用于在LCD显示屏上输出字符串的函数。函数接受3个参数:x表示列数,y表示行数,s表示要输出的字符串。函数会根据传入的行数y,设置相应的光标位置。然后用while循环逐个输出字符串中的字符,并调用DelayUs2x函数延时以确保字符能够正常显示。其中DelayUs2x函数是一个自定义的延时函数,可能是用来控制字符显示速度的。
相关问题
编写详细简洁的C语言程序在 µ’nSP™十六位单片机实验箱 SPLC501 液晶显示器上完成一个简单电子时钟,开发平台为u'nSP IDE,一定需要注意要求是只能用头文件SPLC501User.h,不能用其他的头文件,同时要将使用到的函数定义在前面 SPLC501 液晶显示模组英文字符显示相关的 API 函数如下: void LCD501_Init(unsigned int InitialData) //初始化液晶显示 void LCD501_ClrScreen(unsigned int Mode) //点亮屏幕或清屏 void LCD501_SetPaintMode(unsigned ModeCode) //设置图形显示模式 unsigned int LCD501_GetPaintMode(void) //获取图形显示模式 void LCD501_FontSet(unsinged int Font) //选择显示字符的字体大小 unsigned int LCD501_FontGet(void) //获得显示字符的字体大小 void LCD501_Char(int x,int y,unsigned int a) //显示字符 void LCD501_PutString(int x,int y,unsigned int a) //显示字符串
以下是一个简单的电子时钟程序,使用SPLC501User.h头文件,仅使用此头文件中的API函数进行操作:
```
#include "SPLC501User.h"
void delay(unsigned int n) //延时函数
{
unsigned int i;
while(n--)
{
for(i=0;i<1000;i++);
}
}
void main(void)
{
unsigned int hour=0,minute=0,second=0; //时分秒变量
LCD501_Init(0x00); //初始化液晶显示
while(1)
{
//显示时分秒
LCD501_ClrScreen(0); //清屏
LCD501_FontSet(0x02); //设置字体大小
LCD501_PutString(0,0,"Time:"); //显示Time:
//显示时
if(hour<10)
{
LCD501_Char(40,0,'0'); //补零
LCD501_Char(48,0,hour+'0');
}
else
{
LCD501_Char(40,0,hour/10+'0');
LCD501_Char(48,0,hour%10+'0');
}
//显示分
LCD501_Char(56,0,':');
if(minute<10)
{
LCD501_Char(64,0,'0'); //补零
LCD501_Char(72,0,minute+'0');
}
else
{
LCD501_Char(64,0,minute/10+'0');
LCD501_Char(72,0,minute%10+'0');
}
//显示秒
LCD501_Char(88,0,':');
if(second<10)
{
LCD501_Char(96,0,'0'); //补零
LCD501_Char(104,0,second+'0');
}
else
{
LCD501_Char(96,0,second/10+'0');
LCD501_Char(104,0,second%10+'0');
}
//时间加1秒
second++;
if(second>=60)
{
second=0;
minute++;
if(minute>=60)
{
minute=0;
hour++;
if(hour>=24)
{
hour=0;
}
}
}
delay(1000); //延时1秒
}
}
```
该程序使用了一个无限循环来不断更新LCD显示。在循环中,首先清空屏幕,然后显示“Time:”字样和当前的时分秒。之后将时分秒变量加1秒,并延时1秒。注意,在显示时分秒时,需要对单个数字进行判断,如果小于10,需要在前面补0。
给出主函数的主要流程步骤:#include "system.h" #include "lcd12864_st7920.h" #include "delay.h" #include <stdio.h> #include "18b20.h" sbit buzzer = P1^3 ; sbit yeweiG =P1^0; sbit yeweiD =P1^1; unsigned char xdata dis0[16];//定义显示区域临时存储数组 unsigned char xdata dis1[16]; unsigned char xdata dis2[16]; unsigned char xdata dis3[16]; unsigned char i; unsigned char ReadTempFlag;//定义读时间标志 int temp1; //温度读取值 float temperature; unsigned long time_20ms=0; //定时器计数 float Sudu =0; //速度值 unsigned int PluNum = 0; //脉冲数 unsigned int disPlu = 0; //脉冲数 bit dealSuduFlag =0; //处理速度标志 float xdata juli=0; //距离 bit disFlag =0;//更新显示 unsigned char yeweiFlag = 'N';//液位标志 void main(void) { Init_Timer0(); //定时器0初始化 UART_Init(); DelayMs(200); //延时有助于稳定 Init_ST7920(); //初始化 ClrScreen(); buzzer =1; // sprintf(dis0,"20%02d-%02d-%02d ",(int)time_buf1[1],(int)time_buf1[2],(int)time_buf1[3],(int)time_buf1[7]);//年月日周 // LCD_PutString(0,1,dis0,16);//显示第时间 // // sprintf(dis0,"%02d:%02d:%02d ",(int)time_buf1[4],(int)time_buf1[5],(int)time_buf1[6]);//时分秒 // LCD_PutString(0,2,dis0,16);//显示第时间 // // LCD_PutString(0,3,"起:5元 3元/km ",16); //固定显示价格 // LCD_PutString(0,4,"实际价格",8); // uartSendStr("ready ok !",10); // Ds1302_Write_Time(); while(1) { if(dealSuduFlag == 1) { Sudu=(float)PluNum0.23.6/2; //m/s 20个脉冲为1圈 3s时间进行检测 disPlu = PluNum/2; //转速 PluNum=0; dealSuduFlag=0; juli = juli+Sudu0.2; //公里 } if(disFlag==1) //显示 { disFlag=0; //标志位清零 ReadTempFlag++; //读取温度计时 if(ReadTempFlag >= 3) { ReadTempFlag=0; temp1=ReadTemperature(); //读取温度 temperature=(float)temp10.0625; //温度值转换 } if((yeweiG == 0)&&(yeweiD == 0))//上下液位有水 { yeweiFlag = 'H'; } sprintf(dis0,"液位 %c ",yeweiFlag);//打印 LCD_PutString(0,1,dis0,16);//显示 sprintf(dis1,"温度 %4.1fC 40 ",temperature);//打印 LCD_PutString(0,2,dis1,16);//显示 if((Sudu>1.5)||(temperature>40)||(yeweiFlag=='L')) //异常情况 {buzzer = !buzzer;} } } }
1. 引入所需头文件:system.h、lcd12864_st7920.h、delay.h、stdio.h、18b20.h;
2. 定义引脚及变量:定义蜂鸣器、液位传感器引脚,定义显示区域临时存储数组、温度读取标志、温度读取值、速度值、脉冲数、距离、更新显示标志、液位标志;
3. 初始化定时器0、串口;
4. 清空 LCD 显示屏;
5. 进入无限循环;
6. 如果处理速度标志为1,则计算速度、脉冲数、距离,处理速度标志清零;
7. 如果更新显示标志为1,则更新 LCD 显示,包括液位、温度、异常情况等;
8. 循环结束,回到第5步。
阅读全文