这是干嘛的 void write_1302(uint add,uint dat)//向1302芯片写函数,指定写入地址,数据 { RST=0; SCLK=0; RST=1; write_byte(add); write_byte(dat); SCLK=1; RST=0; } uint read_1302(uint add)//从1302读数据函数,指定读取数据来源地址 { uint temp11; RST=0; SCLK=0; RST=1; write_byte(add); temp11=read_byte(); SCLK=1; RST=0; return(temp11); } uint BCD_Decimal(int bcd)//BCD码转十进制函数,输入BCD,返回十进制 { return((bcd>>4)*10+(bcd&0x0F)); }
时间: 2024-04-22 11:27:34 浏览: 48
这段代码实现了操作DS1302实时时钟芯片的函数。DS1302是一种带有实时时钟功能的时钟芯片,可以用于嵌入式系统中的时间计数、定时等应用。其中,write_1302()函数用于向DS1302中指定的地址写入数据,read_1302()函数用于从DS1302中读取指定地址的数据。BCD_Decimal()函数用于将BCD码转换为十进制数。
具体实现过程如下:
1. 在write_1302()函数中,先将RST和SCLK引脚置为0,表示开始写入数据。
2. 将RST引脚置为1,表示开始传输数据。
3. 通过调用write_byte()函数,向DS1302中写入两个字节的数据,分别是指定的地址和数据。
4. 将SCLK引脚置为1,表示数据传输结束。
5. 最后,将RST引脚置为0,表示写入数据完成。
6. 在read_1302()函数中,先将RST和SCLK引脚置为0,表示开始读取数据。
7. 将RST引脚置为1,表示开始传输数据。
8. 通过调用write_byte()函数,向DS1302中写入要读取的地址。
9. 通过调用read_byte()函数,从DS1302中读取指定地址的数据,并将其保存到temp11变量中。
10. 将SCLK引脚置为1,表示数据传输结束。
11. 最后,将RST引脚置为0,表示读取数据完成,并返回读取到的数据。
12. 在BCD_Decimal()函数中,将输入的BCD码转化为十进制数并返回。
该函数常用于嵌入式系统中的时间计数、定时等应用,以实现对实时时钟芯片的读写和控制。
相关问题
#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); //等待设置完成 }
这是一段使用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液晶屏的控制和显示。其中,延时函数和向液晶屏写入指令和数据的函数是基础,而设置当前行和列、写入字符串和初始化函数则是对这些基础函数的封装。
阅读全文