51单片机lcd光照强度显示
时间: 2023-09-02 12:05:34 浏览: 40
要在51单片机上实现LCD光照强度显示,需要使用光敏电阻或光电二极管作为光照传感器,并将其连接到单片机的模拟输入引脚。下面是一个简单的示例代码:
```c
#include <reg51.h>
#define LCD_DATA P2 // LCD 数据口
#define LCD_RS P3_6 // LCD RS 引脚
#define LCD_RW P3_5 // LCD RW 引脚
#define LCD_EN P3_4 // LCD EN 引脚
sbit LDR = P1_0; // 光敏电阻连接到P1.0
unsigned int adc_value; // ADC 转换结果
void delay(unsigned int t)
{
while (t--);
}
void lcd_write_cmd(unsigned char cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = cmd;
LCD_EN = 1;
delay(10);
LCD_EN = 0;
}
void lcd_write_data(unsigned char dat)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = dat;
LCD_EN = 1;
delay(10);
LCD_EN = 0;
}
void lcd_init()
{
lcd_write_cmd(0x38); // 8位数据总线,2行显示,5x7点阵字符
lcd_write_cmd(0x0C); // 开显示,不显示光标,不闪烁
lcd_write_cmd(0x06); // 光标右移,字符不移动
lcd_write_cmd(0x01); // 清屏
}
void adc_init()
{
P1ASF = 0x01; // P1.0 设为模拟输入
ADC_CONTR = 0x8F; // A/D 转换时钟为系统时钟1/32,选择模拟输入0
}
unsigned int adc_read(unsigned char ch)
{
ADC_CONTR = 0x8F | ch; // 开始转换
delay(100);
return ADC_RES * 256 + ADC_RESL; // 返回转换结果
}
void main()
{
lcd_init();
adc_init();
while (1)
{
adc_value = adc_read(0); // 读取光敏电阻的模拟值
lcd_write_cmd(0x80); // 光标移动到第一行
lcd_write_data('L');
lcd_write_data('i');
lcd_write_data('g');
lcd_write_data('h');
lcd_write_data('t');
lcd_write_data(':');
lcd_write_data((adc_value / 1000) % 10 + '0'); // 显示千位数字
lcd_write_data((adc_value / 100) % 10 + '0'); // 显示百位数字
lcd_write_data((adc_value / 10) % 10 + '0'); // 显示十位数字
lcd_write_data(adc_value % 10 + '0'); // 显示个位数字
}
}
```
该代码使用了P1.0作为光敏电阻的输入引脚,并将LCD的数据口连接到P2口,RS、RW和EN引脚连接到P3.6、P3.5和P3.4。程序中先初始化LCD和ADC,然后不断读取光敏电阻的模拟值并在LCD上显示。具体实现过程中要根据实际情况进行调整。