51单片机用1602LCD和定时器中断及三个按键实现简易秒表
时间: 2024-02-12 09:03:36 浏览: 165
好的,我可以为您提供一些思路和代码示例。
首先,您需要将1602 LCD连接到51单片机上,连接方式与上一个问题中的相同。另外,您需要连接三个按键到51单片机上,例如:
按键 | 51单片机
-|-
开始/停止 | P3.0
复位 | P3.1
计次 | P3.2
接下来,您需要编写代码来实现简易秒表。以下是一个示例代码:
```c
#include <reg51.h>
#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_EN P2_2
#define LCD_DATA P0
#define KEY_START_STOP P3_0
#define KEY_RESET P3_1
#define KEY_RECORD P3_2
unsigned char str[6];
unsigned int time = 0;
unsigned char running = 0;
unsigned char need_reset = 0;
void delay(unsigned int i)
{
while (i--) ;
}
void lcd_cmd(unsigned char cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = cmd;
delay(100);
LCD_EN = 1;
delay(100);
LCD_EN = 0;
}
void lcd_data(unsigned char dat)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = dat;
delay(100);
LCD_EN = 1;
delay(100);
LCD_EN = 0;
}
void lcd_init()
{
lcd_cmd(0x38); // 8 bit, 2 行,5*7 点阵
lcd_cmd(0x0c); // 显示开,光标不显示,不闪烁
lcd_cmd(0x06); // 光标右移
lcd_cmd(0x01); // 显示清屏
}
void display_time(unsigned int t)
{
sprintf(str, "%05d", t);
lcd_cmd(0x80); // 定位光标到第一行第一列
for (int i = 0; i < 5; i++) {
lcd_data(str[i]);
}
}
void timer0_isr() interrupt 1
{
if (running) {
time++;
}
}
void main()
{
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0xfc; // 定时器0初值,1ms
TL0 = 0x67;
TR0 = 1; // 启动定时器0
ET0 = 1; // 使能定时器0中断
EA = 1; // 使能总中断
lcd_init();
while (1) {
if (KEY_START_STOP == 0) { // 开始/停止按键按下
delay(10);
if (KEY_START_STOP == 0) {
running = !running; // 开始/停止秒表
need_reset = 0; // 取消复位标志
}
while (KEY_START_STOP == 0) ; // 等待按键释放
}
if (KEY_RESET == 0) { // 复位按键按下
delay(10);
if (KEY_RESET == 0) {
time = 0; // 复位秒表
running = 0; // 停止秒表
need_reset = 0; // 取消复位标志
display_time(time); // 显示复位后的时间
}
while (KEY_RESET == 0) ; // 等待按键释放
}
if (KEY_RECORD == 0) { // 计次按键按下
delay(10);
if (KEY_RECORD == 0) {
if (!need_reset) { // 如果已经复位了,则不再计次
need_reset = 1; // 设置复位标志
lcd_cmd(0xc0); // 定位光标到第二行第一列
lcd_data('>'); // 显示计次符号
display_time(time); // 显示计次后的时间
}
}
while (KEY_RECORD == 0) ; // 等待按键释放
}
if (running) {
display_time(time); // 显示当前时间
}
delay(10);
}
}
```
以上代码实现了一个带有开始/停止、复位和计次功能的秒表,可以通过按键来控制。您可以根据需要进行修改和优化。
阅读全文
相关推荐














