建材外贸网站建设,备案中心查网站,网络营销典型案例有哪些,做网站常规语言简介
是一个液晶显示屏#xff0c;通过电压对显示区域进行控制#xff0c;有电就显示。
能够同时显示32个字符#xff0c;分为两行#xff0c;一行显示16个字符。可以显示的内容只能是字母、数字或者一些特殊符号。
使用ASCII码来让LCD1602来显示对应的字符。
电路图
…简介
是一个液晶显示屏通过电压对显示区域进行控制有电就显示。
能够同时显示32个字符分为两行一行显示16个字符。可以显示的内容只能是字母、数字或者一些特殊符号。
使用ASCII码来让LCD1602来显示对应的字符。
电路图
图示 引脚说明
第1引脚GND是接地引脚。
第2引脚VCC是电源引脚。
第3引脚VO/VL是液晶显示器的对比度调整接正电源时对比度比较高 接地的时候对比度比较低。
第4引脚RS为寄存器选择高电平选择的是数据寄存器低电平选择的是指令寄存器。高数低命
第5引脚RW读写信号线高电平代表进行读操作低电平代表进行写操作。 RS低电平RW为高电平读命令 RS高电平RW为低电平写数据
第6引脚E端使能端当E由高电平变为低电平液晶模块就不再输出显示了而是执行命令或者写入数据。
第7~14引脚D0~D7为8位的双向数据线。
第15引脚背光源正极。
第16引脚背光源负极。
LCD1602的显示方式
图示 LCD1602的基本操作方式
图示 读状态输入RS0RW1E1.输出D0~D7为状态字读忙信号D7引脚为标志位(BF), 高电平表示忙低电平表示不忙。
读数据输入RS1RW1E1.输出D0~D7的八位数字为数据。
写命令输入RS0RW0E0.输出无。将指令或者显示地址写入到LCD1602中。
写数据输入RS1RW0E0 输出无。写入数据。
LCD1602的时序图
图示 由于DS18B20是单总线设计只能通过一个引脚来读取和写入命令或数据但是LCD1602是由8个引脚来传输数据所以不需要像DS18B20一样有严格的时序时间要求。
练习
1、将DS18B20的温度显示到LCD1602中
2、使用按键来改变DS18B20的报警阈值并更新显示在LCD1602中。报警时机会根据阈值的改变而改变可以对报警的频率进行不同的设置比如20度报警音调低30度稍高40度更高。
#include reg51.h
#define uchar unsigned char
#define DataPort P2
sbit RS P0^7;
sbit RW P0^6;
sbit E P0^5; //lcd显示屏sbit DQP3^7; //温度
sbit BEE P3^6;//蜂鸣器sbit KEY1P3^5; //按键
sbit KEY2P3^4;
sbit KEY3P3^3;//unsigned char arr1[10] {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};unsigned char arr1[10] {0,1,2,3,4,5,6,7,8,9};//unsigned char arr2[10] {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10};unsigned char tempL 0;
unsigned char tempH 0;unsigned char flag1;unsigned int sdata;unsigned char xiaoshu1;
unsigned char xiaoshu2;void delay(unsigned char i)
{for(i; i 0; i--);
}void Delay10ms() //11.0592MHz
{unsigned char i, j;i 18;j 235;do{while (--j);} while (--i);
}unsigned char Init_DS18B20()
{unsigned char x 0;DQ1; delay(8); DQ0; delay(80); DQ1; delay(5); x DQ; delay(30); return x;
}// 写函数void writeOneChar(unsigned char dat)
{unsigned char i0;for(i 8;i 0;i--) {DQ0; DQdat0x01;delay(5); DQ1; dat1; delay(2); }
}// 读函数unsigned char readOneChar()
{unsigned char dat0; unsigned int i ;for(i 0; i 8 ;i){DQ1;delay(1); DQ0;delay(1); dat1; DQ1; if(DQ){ dat|0x80;}delay(4);}return dat;
}// 读取温度值
void readTemperature()
{while(Init_Ds18B20()); writeOneChar(0xcc); writeOneChar(0x44); delay(124); while(Init_Ds18B20());writeOneChar(0xcc); writeOneChar(0xbe); tempL readOneChar(); tempH readOneChar(); if(tempH0x7f){tempL ~tempL 1;tempH ~tempH;flag 0;}sdata (float)(tempH 8 | tempL) / 16.0; xiaoshu1 (tempL0x0f)*10/16;xiaoshu2 (tempL0x0f)*100/16%10;}//检测LCD是否忙
void BusyCheck()
{uchar sta;DataPort 0xff;RS0;RW1;do{E1;staDataPort;E0;}while(sta0x80);
}//写数据
void WriteData(uchar dat)
{BusyCheck(); RS 1;RW 0;DataPort dat;E1;E0;}
//写命令
void WriteCMD(uchar cmd)
{BusyCheck(); RS0;RW0;DataPort cmd;E1;E0;
}
//lcd屏幕
void lcd()
{WriteCMD(0x06);WriteCMD(0x0c);WriteCMD(0x38);WriteCMD(0x80);WriteData(arr1[sdata/10]);WriteData(arr1[sdata%10]);WriteData(.);WriteData(arr1[xiaoshu1]);WriteData(arr1[xiaoshu2]);WriteData( );WriteData( );
}蜂鸣器
//void beef()
//{
// BEE1;
// if(sdata 50)
// {
// BEE !BEE;
// }
// else
// {
// BEE 1;
// }
//}
//
//按键
void key()
{//定义两个字符unsigned char ch10;unsigned char ch20;int i;if(KEY10)//20-30{KEY10;KEY21;KEY31;Delay10ms();ch12;ch20;if(sdata20 sdata 30){for(i0;i300;i){BEE !BEE;delay(100);}}}if(KEY20)//30-40{KEY11;KEY20;KEY31;Delay10ms();ch13;ch20;if(sdata30 sdata 40){for(i0;i300;i){BEE ! BEE;delay(300);delay(300);}}}if(KEY30)//大于40{KEY11;KEY21;KEY30;Delay10ms();ch14;ch20;if(sdata40){for(i0;i300;i){BEE ! BEE;delay(300);delay(300);delay(300);}}}WriteData(ch1);WriteData(ch2);}void main()
{WriteCMD(0x01);while(1){readTemperature();lcd();// beef();key();}}