C51按键同时控制lcd1602和蜂鸣器的代码
时间: 2023-10-22 17:09:28 浏览: 344
C51操作1602液晶显示的代码
以下是一个基于C51单片机的示例代码,可以让按键同时控制LCD1602显示屏和蜂鸣器:
```c
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
// 定义按键引脚和蜂鸣器引脚
sbit BUTTON_PIN = P1^0;
sbit BUZZER_PIN = P1^1;
// 定义LCD1602引脚
sbit RS = P2^6;
sbit RW = P2^5;
sbit EN = P2^4;
// 声明LCD1602相关函数
void LCD_Init();
void LCD_WriteCmd(uchar cmd);
void LCD_WriteData(uchar dat);
void LCD_ShowString(uchar x, uchar y, uchar *str);
void LCD_Clear();
void main() {
// 初始化按键输入和蜂鸣器输出引脚
BUTTON_PIN = 1;
BUZZER_PIN = 0;
// 初始化LCD1602
LCD_Init();
LCD_ShowString(0, 0, "Hello, World!");
while (1) {
// 如果按键按下
if (BUTTON_PIN == 0) {
// 控制蜂鸣器响一声
BUZZER_PIN = 1;
_nop_();
_nop_();
_nop_();
_nop_();
BUZZER_PIN = 0;
// 在LCD1602上显示按键状态
LCD_Clear();
LCD_ShowString(0, 0, "Button is pressed");
} else {
// 在LCD1602上显示当前时间
LCD_Clear();
LCD_ShowString(0, 0, "Time: ");
LCD_ShowString(6, 0, " ");
LCD_ShowString(6, 0, itoa(TF0, buf, 10));
}
}
}
// 初始化LCD1602
void LCD_Init() {
LCD_WriteCmd(0x38);
LCD_WriteCmd(0x0c);
LCD_WriteCmd(0x06);
LCD_WriteCmd(0x01);
}
// 发送命令到LCD1602
void LCD_WriteCmd(uchar cmd) {
RS = 0;
RW = 0;
P0 = cmd;
EN = 1;
_nop_();
_nop_();
EN = 0;
}
// 发送数据到LCD1602
void LCD_WriteData(uchar dat) {
RS = 1;
RW = 0;
P0 = dat;
EN = 1;
_nop_();
_nop_();
EN = 0;
}
// 在LCD1602上显示字符串
void LCD_ShowString(uchar x, uchar y, uchar *str) {
uchar i = 0;
if (y == 0) {
LCD_WriteCmd(0x80 + x);
} else {
LCD_WriteCmd(0x80 + 0x40 + x);
}
while (str[i] != '\0') {
LCD_WriteData(str[i]);
i++;
}
}
// 清空LCD1602屏幕
void LCD_Clear() {
LCD_WriteCmd(0x01);
}
```
这段代码会初始化一个LCD1602显示屏和一个蜂鸣器,然后在主循环中不断读取按键状态。如果按键被按下,会让蜂鸣器响一声并在LCD1602上显示按键状态;如果按键没有被按下,会在LCD1602上显示当前时间。你可以根据自己的需求修改代码,比如修改蜂鸣器的频率、修改LCD1602显示的内容等等。
阅读全文