#include "lcd1602.h" void delay_ (uint i) { while(i--); } * 名称 : write_com(uchar com) * 功能 : 1602命令函数 * 输入 : 输入的命令值 * 输出 : 无 void write_com(uchar com) { e=0; rs=0; rw=0; P0=com; delay_uint(20); e=1; delay_uint(20); e=0; } * 名称 : write_data(uchar dat) * 功能 : 1602写数据函数 * 输入 : 需要写入1602的数据 * 输出 : 无 void write_data(uchar dat) { e=0; rs=1; rw=0; P0=dat; delay_uint(20); e=1; delay_uint(20); e=0; } //设置当前行和列 void write_sfm(uchar hang,uchar add) { if(hang==1) //设置当前行 write_com(0x80+add); else write_com(0x80+0x40+add); } * 名称 : write_string(uchar hang,uchar add,uchar *p) * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下 write_string(1,5,"ab cd ef;") * 输入 : 行,列,需要输入1602的数据 * 输出 : 无 void write_string(uchar hang,uchar add,uchar *p) { if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p == '\0') break; write_data(*p); p++; } } * 名称 : init_1602() * 功能 : 初始化1602液晶 * 输入 : 无 * 输出 : 无 void init_1602() { write_com(0x38); //数据总线为8位,显示2行,5x7点阵 write_com(0x0c); //开显示,有光标,光标闪烁 write_com(0x06); //光标自动右移 delay_uint(1000); //等待设置完成 }

时间: 2024-02-06 22:02:50 浏览: 30
这是一段使用8051单片机控制LCD1602液晶显示器的代码。代码中包含了一些函数,如write_com()用于向LCD1602发送命令,write_data()用于向LCD1602写入数据,write_string()用于将字符串写入LCD1602的指定位置,init_1602()用于初始化LCD1602。代码中还有一些延时函数,如delay_(),用于提供延时等待。 在代码中,使用了P0口来控制LCD1602显示器。其中,rs、rw、e分别代表寄存器选择、读写选择、使能信号的引脚,可以通过修改这些引脚的电平来向LCD1602发送命令或数据。 通过调用这些函数,我们可以在LCD1602显示器上显示各种信息,如字符、数字、符号等。例如,我们可以使用write_string()函数将字符串"Hello World!"写入LCD1602的第1行第1列处,代码如下: ```C init_1602(); //初始化LCD1602 write_string(1, 1, "Hello World!"); //将字符串写入LCD1602的第1行第1列处 ``` 需要注意,该代码是基于8051单片机的,如果您要在其他平台上使用,需要根据具体的硬件平台和开发环境进行相应的修改。
相关问题

#include "lcd1602.h" void delay_ (uint i) { while(i--); } void write_com(uchar com) { e=0; rs=0; rw=0; P0=com; delay_uint(20); e=1; delay_uint(20); e=0; } void write_data(uchar dat) { e=0; rs=1; rw=0; P0=dat; delay_uint(20); e=1; delay_uint(20); e=0; } //设置当前行和列 void write_sfm(uchar hang,uchar add) { if(hang==1) //设置当前行 write_com(0x80+add); else write_com(0x80+0x40+add); } void write_string(uchar hang,uchar add,uchar *p) { if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p == '\0') break; write_data(*p); p++; } } void init_1602() { write_com(0x38); write_com(0x0c); write_com(0x06); delay_uint(1000); }

这是一个LCD1602液晶屏的驱动程序,用于控制1602液晶屏的显示。程序中包含以下函数: 1. delay_ (uint i):实现简单的延时功能,i表示延时的时间,通过while循环实现延时。 2. write_com(uchar com):向液晶屏写入指令,com表示指令的值,通过P0口将指令传递给液晶屏,实现对液晶屏的控制。 3. write_data(uchar dat):向液晶屏写入数据,dat表示数据的值,通过P0口将数据传递给液晶屏,实现对液晶屏的显示。 4. write_sfm(uchar hang,uchar add):设置当前行和列,hang表示当前行,add表示当前列,通过调用write_com函数实现设置。 5. write_string(uchar hang,uchar add,uchar *p):向液晶屏写入字符串,hang表示字符串所在的行,add表示字符串所在的列,p表示字符串的地址,通过调用write_data函数实现向液晶屏的写入。 6. init_1602():初始化液晶屏,通过调用write_com函数实现对液晶屏的初始化。 总的来说,这个程序实现了对LCD1602液晶屏的控制和显示。其中,延时函数和向液晶屏写入指令和数据的函数是基础,而设置当前行和列、写入字符串和初始化函数则是对这些基础函数的封装。

#include “reg52.h” #include “LCD1602.h” #include “LCD1602.c” #include “ADC0832.h” #define uchar 无符号字符 #define uint 无符号 int sbit relay=P1^6;sbit keyAdd=P3^2;位键Dec=P3^3;uchar str[]=“Curret:00%”;uchar strV[]=“ Set:50%”;void delay_ms(uint xms);void main() { uchar i; uchar mCurrent; uchar mSet=50;LcdInt();Write_com(0x01);ÇåÆÁ delay_1602(5);写入地址(0x03);delay_1602(5);for(i=0;i<11;i++) { WriteData(str[i]); delay_1602(5); }写入地址(0x40);delay_1602(5);for(i=0;i<11;i++) { WriteData(strV[i]); delay_1602(5); } while(1) { if(keyAdd==0) { mSet++;写入地址(0x48);delay_1602(5);WriteData(mSet/10+0x30);delay_1602(5);WriteData(mSet%10+0x30);而(!keyAdd);} if(keyDec==0) { mSet--;写入地址(0x48);delay_1602(5);WriteData(mSet/10+0x30);delay_1602(5);WriteData(mSet%10+0x30);delay_1602(5);而(!keyDec);} mCurrent=ADC0832()*99/255;写入地址(0x08);写入数据(mCurrent/10+0x30);WriteData(mCurrent%10+0x30);if(mCurrent<mSet) 继电器=0;否则中继=1;delay_ms(200);} } void delay_ms(uint xms) { uint i,j; for(i=0;i<xms;i++) for(j=0;j<121;j++); }怎么把set这个改为ok

你需要在代码中将所有的 "mSet" 替换为 "ok",并且需要修改字符串数组 strV[] 为 " Ok:50%"。同时,你还需要修改按键的提示信息为 "Press OK to increase, Press DEC to decrease". 具体的修改如下所示: ``` #include “reg52.h” #include “LCD1602.h” #include “LCD1602.c” #include “ADC0832.h” #define uchar unsigned char #define uint unsigned int sbit relay=P1^6; sbit keyAdd=P3^2; sbit keyDec=P3^3; uchar str[]=“Current:00%”; uchar strV[]=“Ok:50%”; void delay_ms(uint xms); void main() { uchar i; uchar mCurrent; uchar ok=50; LcdInit(); Write_com(0x01); delay_1602(5); WriteData(0x03); delay_1602(5); for(i=0;i<11;i++) { WriteData(str[i]); delay_1602(5); } WriteData(0x40); delay_1602(5); for(i=0;i<11;i++) { WriteData(strV[i]); delay_1602(5); } while(1) { if(keyAdd==0) { ok++; WriteData(0x48); delay_1602(5); WriteData(ok/10+0x30); delay_1602(5); WriteData(ok%10+0x30); while(!keyAdd); } if(keyDec==0) { ok--; WriteData(0x48); delay_1602(5); WriteData(ok/10+0x30); delay_1602(5); WriteData(ok%10+0x30); delay_1602(5); while(!keyDec); } mCurrent=ADC0832()*99/255; WriteData(0x08); WriteData(mCurrent/10+0x30); WriteData(mCurrent%10+0x30); if(mCurrent<ok) relay=0; else relay=1; delay_ms(200); } } void delay_ms(uint xms) { uint i,j; for(i=0;i<xms;i++) for(j=0;j<121;j++); } ```

相关推荐

这是一个能实现四个88的max7219级联成1616的led点阵的程序,以下是全部代码,请在主函数添加代码,使点阵显示的图案向左滚动//单片机晶振12M #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define count 4 //级联个数 sbit Max7219_pinCLK = P2^2; sbit Max7219_pinCS = P2^1; sbit Max7219_pinDIN = P2^0; uchar code disp1[16][8]= { {0x0,0x0,0x0,0x0,0x0,0xFE,0x0,0x0}, {0x1,0x1,0x1,0x1,0x1,0xFF,0x1,0x1}, {0x2,0x2,0x4,0x4,0x8,0x10,0x20,0xC0}, {0x80,0x80,0x40,0x40,0x20,0x10,0x8,0x6},/"未命名文件",0/ }; void Delay_xms(uint x) { uint i,j; for(i=0;i<x;i++) for(j=0;j<112;j++); } void Write_Max7219_byte(uchar DATA) //-------------------------------------------- //功能:向MAX7219(U3)写入字节 //入口参数:DATA //出口参数:无 { uchar i; for(i=8;i>=1;i--) { Max7219_pinCLK=0; Max7219_pinDIN=DATA&0x80; DATA=DATA<<1; Max7219_pinCLK=1; } } void Write_Max7219(uchar address1,uchar dat1,uchar address2,uchar dat2) { uchar i; Max7219_pinCS=0; Write_Max7219_byte(address1); Write_Max7219_byte(dat1); Write_Max7219_byte(address2); Write_Max7219_byte(dat2); nop(); Max7219_pinCS=1; } void Init_MAX7219(void) { Write_Max7219(0x09, 0x00,0x09, 0x00); //译码方式:BCD码 Write_Max7219(0x0a, 0x03,0x0a, 0x03); //亮度 Write_Max7219(0x0b, 0x07,0x0b, 0x07); //扫描界限;8个数码管显示 Write_Max7219(0x0c, 0x01,0x0c, 0x01); //掉电模式:0,普通模式:1 Write_Max7219(0x0f, 0x00,0x0f, 0x00); //显示测试:1;测试结束,正常显示:0 } void main(void) { uchar i,j; Delay_xms(50); Init_MAX7219(); while(1) // for(i=1;i<9;i++) // Write_Max7219(i,disp1[1][i-1],i,disp1[0][i-1]); { for(i=1;i<9;i++) { Max7219_pinCS=0; for(j=0;j<count;j++) { Write_Max7219_byte(i); //写入地址,即数码管编号 Write_Max7219_byte(disp1[count-1-j][i-1]); //写入数据,即数码管显示数字 nop(); } Max7219_pinCS=1; } Delay_xms(1000); } }

#include<reg51.h> #include<intrins.h> #define dm P0 #define uchar unsigned char #define uint unsigned int sbit DQ=P1^6; sbit w0=P2^0; sbit w1=P2^1; sbit w2=P2^2; sbit w3=P2^3; sbit beep=P3^7; int temp1=0; uint h; uint temp; uchar r; uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; uchar code table_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; uchar code table_dml[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; uchar data temp_data[2]={0x00,0x00}; uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; void delay(uint t) { for(;t>0;t--); } void xianshi() { int j; for(j=0;j<4;j++) { switch(j) { case 0: dm=table_dm[display[0]]; w0=0; delay(300); w0=1; case 1: dm=table_dml[display[1]]; w1=0; delay(300); w1=1; case 2: dm=table_dm[display[2]]; w2=0; delay(300); w2=1; case 3: dm=table_dm[display[3]]; w3=0; delay(300); w3=1; } } } ow_reset(void) { char presence=1; while(presence) { while(presence) { DQ=1;_nop_();_nop_(); DQ=0; delay(50); DQ=1; delay(6); presence=~DQ; } delay(45); presence=~DQ; } DQ=1; return presence; } void write_byte(uchar val) { uchar i; for(i=8;i>0;i--) { DQ=1;_nop_();_nop_(); DQ=0;_nop_();_nop_();_nop_();_nop_(); DQ=val&0x01; delay(6); val=val>>1; } DQ=1; delay(1); } uchar read_byte(void) { uchar i; uchar value=0; for(i=8;i>0;i--) { DQ=1;_nop_();_nop_(); value>>=1; DQ=0;_nop_();_nop_();_nop_();_nop_(); DQ=1;_nop_();_nop_();_nop_();_nop_(); if(DQ)value|=0x80; delay(6); } DQ=1; return value; } read_temp() { ow_reset(); delay(200); write_byte(0xcc); write_byte(0x44); ow_reset(); delay(1); write_byte(0xcc); write_byte(0xbe); temp_data[0]=read_byte(); temp_data[1]=read_byte(); temp=temp_data[1]; temp<<=8; temp=temp|temp_data[0]; return temp; } work_temp(uint tem) { uchar n=0; if(tem>6348) { tem=65536-tem; n=1; } display[4]=tem&0x0f; display[0]=ditab[display[4]]; display[4]=tem>>4; display[3]=display[4]/100; display[1]=display[4]%100; display[2]=display[1]/10; display[1]=display[1]%10; r=display[1]+display[2]*10+display[3]*100; if(!display[3]) { display[3]=0x0a; if(!display[2]) { display[2]=0x0a; } } if(n) { display[3]=0x0b; } return n; } void BEEP() { if((r>30)) { beep=!beep; } else { beep=0; } } void main() { beep=0; dm=0x00; w0=0; w1=0; w2=0; w3=0; for(h=0;h<4;h++) { display[h]=0; } ow_reset(); write_byte(0xcc); write_byte(0x44); for(h=0;h<50;h++) { xianshi(); } while(1) { if(temp1==0) { work_temp(read_temp()); xianshi(); BEEP(); } } }

最新推荐

recommend-type

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
recommend-type

matlab建立计算力学课程的笔记和文件.zip

matlab建立计算力学课程的笔记和文件.zip
recommend-type

FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
recommend-type

matlab基于RRT和人工势场法混合算法的路径规划.zip

matlab基于RRT和人工势场法混合算法的路径规划.zip
recommend-type

matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip

matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。