在使用lcd屏时0X18,0X08,0X7F,0XFC,0X01,0X04,0X09,0X20,0X11,0X10,0X21,0X08,0X45,0X04,0X02,0X00是系
时间: 2023-09-25 09:11:19 浏览: 14
这串数据并不是一个字符或字符串,而是LCD屏幕上多个像素点的显示数据。LCD屏幕的每个像素点都由多个二进制位表示,这些二进制位被组合成一个字节(即8位二进制数),然后将这些字节发送到LCD屏幕上进行显示。这串数据中的每个字节都代表着一个像素点的状态,具体的显示效果需要根据LCD屏幕的控制方式和具体的显示模式来确定。
相关问题
void main() { TMOD =0X01; TH0=0xFC; TL0=0x18; IE=0x82; LCD_Init(); x=0; while(1) { m=second/10; s=second%10; Nixie(1,m); Nixie(2,s); KeyNum=Key(); MKeyNum=MatrixKey(); if(KeyNum) { j=KeyNum; switch(j) { case 1: TR0=~TR0;break; case 2: sec[x]=second;x++;break; case 3: n=1;break; default: break; } } if(MKeyNum==1) { if(k<20) k++; LCD_ShowNum(1,1,sec[k],2); } if(MKeyNum==2) { if(k>0) k--; LCD_ShowNum(1,1,sec[k],2); } } } void Timer0() interrupt 1 { static unsigned int timer; TH0=0XFC; TL0=0X18; if(n==1) { Beep(100); Delay(5); Beep(100); Delay(5); Beep(100); second=0; TR0=0; n=0; x=0; } timer++; if(timer==1000) { timer=0; second++; if(second%10==0) Beep(50); if(second==100) second=0; } }
这段代码是主函数和一个中断函数。主函数中主要是对各种变量进行赋值和控制,同时运行一个while循环不断执行程序。中断函数是一个定时器中断,每当定时器计时到一定值时,就会触发该中断函数,进行相应的操作。
下面是对主函数和中断函数各部分的注释:
```C
void main() {
TMOD =0X01; // 设置定时器0为模式1
TH0=0xFC; // 设置定时器0的高8位计数初值
TL0=0x18; // 设置定时器0的低8位计数初值
IE=0x82; // 开启定时器0中断
LCD_Init(); // 初始化液晶显示屏
x=0; // 将变量x的值设为0
while(1) // 进入循环
{
m=second/10; // 将second除以10得到十位数
s=second%10; // 将second模10得到个位数
Nixie(1,m); // 将十位数显示在数码管1上
Nixie(2,s); // 将个位数显示在数码管2上
KeyNum=Key(); // 读取按键的值
MKeyNum=MatrixKey(); // 读取矩阵按键的值
if(KeyNum) // 如果按键被按下
{
j=KeyNum; // 将按键的值赋给j
switch(j) // 根据按键的值进行相应的操作
{
case 1: TR0=~TR0;break; // 如果按下的是1号键,则翻转定时器0的开关
case 2: sec[x]=second;x++;break; // 如果按下的是2号键,则将当前秒数存入数组sec中
case 3: n=1;break; // 如果按下的是3号键,则将n的值设为1
default: break; // 如果按下的是其他键,则什么也不做
}
}
if(MKeyNum==1) // 如果按下的是矩阵按键1
{
if(k<20) k++; // 如果k的值小于20,则将k的值加1
LCD_ShowNum(1,1,sec[k],2); // 在液晶显示屏上显示数组sec中第k个元素的值
}
if(MKeyNum==2) // 如果按下的是矩阵按键2
{
if(k>0) k--; // 如果k的值大于0,则将k的值减1
LCD_ShowNum(1,1,sec[k],2); // 在液晶显示屏上显示数组sec中第k个元素的值
}
}
}
void Timer0() interrupt 1 { // 定时器0中断函数
static unsigned int timer; // 定义一个静态变量timer
TH0=0XFC; // 重新设置定时器0的高8位计数初值
TL0=0X18; // 重新设置定时器0的低8位计数初值
if(n==1) // 如果n的值为1
{
Beep(100); // 发出三声蜂鸣声
Delay(5); // 延时5毫秒
Beep(100); // 发出三声蜂鸣声
Delay(5); // 延时5毫秒
Beep(100); // 发出三声蜂鸣声
second=0; // 将second的值设为0
TR0=0; // 关闭定时器0
n=0; // 将n的值设为0
x=0; // 将x的值设为0
}
timer++; // 将timer的值加1
if(timer==1000) // 如果timer的值为1000
{
timer=0; // 将timer的值设为0
second++; // 将second的值加1
if(second%10==0) Beep(50); // 每隔10秒发出一声短蜂鸣声
if(second==100) second=0; // 如果second的值为100,则将其设为0
}
}
```
atc89c51单片机ds18b20温度传感器LCD1602显示温度
要实现atc89c51单片机ds18b20温度传感器LCD1602显示温度,你需要进行如下步骤:
1. 确保你有一个atc89c51单片机和ds18b20温度传感器以及LCD1602液晶显示屏。
2. 连接ds18b20温度传感器到atc89c51单片机,你需要将ds18b20的VCC引脚连接到atc89c51单片机的5V电源引脚,GND引脚连接到atc89c51单片机的GND引脚,DQ引脚连接到atc89c51单片机的任意一个IO引脚。
3. 编写atc89c51单片机的程序,读取ds18b20温度传感器的数据并将其显示在LCD1602液晶屏幕上。以下是一个简单的示例程序:
```c
#include <reg52.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define DS18B20_IO P3_7
uchar TH, TL; // 温度存储变量
// DS18B20相关函数
uchar Init_DS18B20(void);
void Write_DS18B20(uchar dat);
uchar Read_DS18B20(void);
void Read_Temperature(void);
// LCD1602液晶显示屏相关函数
void delay(uchar ms);
void LCD_Write_Cmd(uchar cmd);
void LCD_Write_Data(uchar dat);
void LCD_Init(void);
void LCD_Show_String(uchar x, uchar y, uchar *str);
void LCD_Show_Temperature(uchar x, uchar y);
void main() {
// 初始化ds18b20温度传感器
Init_DS18B20();
// 初始化LCD1602液晶显示屏
LCD_Init();
while (1) {
// 读取温度数据
Read_Temperature();
// 显示温度数据到LCD1602液晶显示屏
LCD_Show_Temperature(0, 0);
}
}
// 初始化DS18B20
uchar Init_DS18B20(void) {
uchar flag;
// 复位DS18B20
DS18B20_IO = 0;
delay(500);
DS18B20_IO = 1;
delay(60);
// 判断DS18B20是否存在
flag = DS18B20_IO;
delay(500);
// 返回DS18B20存在标志
return flag;
}
// 向DS18B20写入一个字节的数据
void Write_DS18B20(uchar dat) {
uchar i;
for (i = 0; i < 8; i++) {
DS18B20_IO = 0;
DS18B20_IO = dat & 0x01;
delay(5);
DS18B20_IO = 1;
dat >>= 1;
}
}
// 从DS18B20读取一个字节的数据
uchar Read_DS18B20(void) {
uchar i, dat = 0;
for (i = 0; i < 8; i++) {
DS18B20_IO = 0;
dat >>= 1;
DS18B20_IO = 1;
if (DS18B20_IO) {
dat |= 0x80;
}
delay(5);
}
return dat;
}
// 读取温度数据
void Read_Temperature(void) {
uchar TL, TH;
// 初始化DS18B20
Init_DS18B20();
// 发送跳过ROM指令
Write_DS18B20(0xCC);
// 发送温度转换指令
Write_DS18B20(0x44);
// 等待转换完成
while (!Read_DS18B20());
// 初始化DS18B20
Init_DS18B20();
// 发送跳过ROM指令
Write_DS18B20(0xCC);
// 发送读取温度指令
Write_DS18B20(0xBE);
// 读取温度值
TL = Read_DS18B20();
TH = Read_DS18B20();
// 计算温度值
TL >>= 4;
TH >>= 4;
TH <<= 4;
TH |= TL & 0x0F;
TH <<= 1;
// 存储温度值
TL = Read_DS18B20();
TH |= Read_DS18B20() << 8;
// 存储温度值到全局变量中
TL >>= 4;
TH |= TL << 8;
TH >>= 1;
}
// 延时函数,延时ms毫秒
void delay(uchar ms) {
uint i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 110; j++);
}
}
// 向LCD1602写入命令
void LCD_Write_Cmd(uchar cmd) {
P2 &= 0x0F;
P2 |= cmd & 0xF0;
P2 &= 0xFC;
P2 |= 0x01;
delay(1);
P2 &= 0xFE;
delay(5);
}
// 向LCD1602写入数据
void LCD_Write_Data(uchar dat) {
P2 &= 0x0F;
P2 |= dat & 0xF0;
P2 |= 0x04;
P2 &= 0xFD;
P2 |= 0x01;
delay(1);
P2 &= 0xFE;
delay(5);
}
// 初始化LCD1602液晶显示屏
void LCD_Init(void) {
LCD_Write_Cmd(0x38);
LCD_Write_Cmd(0x0C);
LCD_Write_Cmd(0x06);
LCD_Write_Cmd(0x01);
}
// 在LCD1602液晶显示屏上显示字符串
void LCD_Show_String(uchar x, uchar y, uchar *str) {
uchar i;
if (y == 0) {
LCD_Write_Cmd(0x80 + x);
} else {
LCD_Write_Cmd(0xC0 + x);
}
for (i = 0; str[i] != '\0'; i++) {
LCD_Write_Data(str[i]);
}
}
// 在LCD1602液晶显示屏上显示温度值
void LCD_Show_Temperature(uchar x, uchar y) {
uchar buf[16];
sprintf(buf, "Temperature: %d.%dC", TH >> 4, TH & 0x0F);
LCD_Show_String(x, y, buf);
}
```
4. 上传程序到atc89c51单片机,并将ds18b20温度传感器和LCD1602液晶屏幕连接到atc89c51单片机。
5. 启动atc89c51单片机,你应该能够看到LCD1602液晶屏幕上显示温度值。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)