讲下这段程序的编程流程和目的#include "main.h" //=========================================== sbit RS=P1^0; sbit RW=P1^1; sbit E=P1^2; sbit lcd_bla = P2^7; //=========================================== void Delay140us() //@12.000MHz 1T { unsigned char i, j; nop(); nop(); i = 2; j = 158; do { while (--j); } while (--i); } //void lcd_delay(uchar z) //{ // uchar t1,y; // for(t1=z;t1>0;t1--) // for(y=110;y>0;y--); //} //void Delay140us() //@12.000MHz 12T //{ // unsigned char i; // // nop(); // i = 67; // while (--i); //} // //uchar lcd_busy() //{ // register uchar lcd_start; // RS=0; // RW=1; // E=1; // lcd_delay(1); // lcd_start=P0; // E=0; // return(lcd_start&0x80); //} //============================================ void read(u8 del) //读函数 { P0=del; // while(lcd_busy()); RS=0; RW=0; E=0; Delay140us(); E=1; Delay140us(); } //============================================ void write(u8 del) //写函数 { P0=del; // while(lcd_busy()); RS=1; RW=0; E=0; Delay140us(); E=1; Delay140us(); } //============================================ //============================================ void lcd_init(void) //初始化函数 { lcd_bla = 0; read(0x01); read(0x0c); read(0x06); read(0xd0); read(0x38); lcd_show(1,1,' '); } //============================================ //void lcd_clear(void) //{ //read(0x01); //Delay140us(); //} void lcd_show(u8 hang,u8 lie,int sign) //数字显示 { u8 a; if(hang==1)a=0x80; if(hang==2) a=0xc0; a=a+lie-1; read(a); write(sign+48); } //============================================ void lcd_string(u8 hang,u8 lie,u8 *p) //字符串显示 { u8 a; if(hang==1)a=0x80; if(hang==2) a=0xc0; a=a+lie-1; read(a); while(1) { if(*p == '\0') break; write(*p); p++; } }
时间: 2023-08-23 20:07:55 浏览: 77
这段程序的编程流程和目的和上一段程序是一样的,都是控制LCD显示器,实现数字和字符串的显示。它们的区别在于一些细节上,比如其中的延时函数Delay140us()使用的是1T的延时方式,而上一段程序中的Delay140us()使用的是12T的延时方式。此外,lcd_init()函数中的lcd_show()函数的参数不同,上一段程序中是' ',而这一段程序中是0x30,这是因为这里将数字0的ASCII码值加上了48,即0x30,实现了数字的显示。
相关问题
对下面代码进行注释#include <reg51.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } void main() { uchar index,LED; SCON=0; // while(1) { LED=0x7f; // for (index=0;index<8;index++) // { SBUF=LED; // do {}while(!TI); // LED=((LED>>1)|0x80); // delay(300); TI=0; // } } }
这段代码主要是使用了 8051 单片机的编程,实现了一个循环输出 LED 灯的程序。具体注释如下:
```c
#include <reg51.h> // 引入 8051 单片机的寄存器定义头文件
#include <intrins.h> // 引入一些内部函数的头文件
#define uint unsigned int // 定义 unsigned int 类型为 uint
#define uchar unsigned char // 定义 unsigned char 类型为 uchar
void delay(uint z) // 定义延迟函数,参数为延迟时间
{
uint x,y;
for(x = z; x > 0; x--) // 循环延迟
for(y = 114; y > 0 ; y--);
}
void main() // 主函数
{
uchar index,LED; // 定义循环计数器和 LED 灯的状态
SCON=0; // 初始化串口寄存器
while(1) // 无限循环
{
LED=0x7f; // 初始化 LED 灯的状态
for (index=0;index<8;index++) // 循环 8 次
{
SBUF=LED; // 将 LED 灯的状态发送给串口
do {} while(!TI); // 等待发送完成
LED=((LED>>1)|0x80); // 更新 LED 灯的状态
delay(300); // 延迟一段时间
TI=0; // 重置串口发送标志
}
}
}
```
阅读全文