51单片机秒表程序代码
时间: 2023-09-29 21:08:23 浏览: 89
51单片机的秒表程序
以下是一个简单的51单片机秒表程序代码,用于计时并显示秒数:
```c
#include <reg51.h>
#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_EN P2_2
#define LCD_DATA P0
void delay(unsigned int time); // 延时函数
void lcd_init(); // LCD 初始化函数
void lcd_cmd(unsigned char cmd); // 发送指令到 LCD
void lcd_data(unsigned char dat); // 发送数据到 LCD
void lcd_display(unsigned char row, unsigned char col, unsigned char *str); // 在指定位置显示字符串
void timer1_init(); // 定时器1初始化函数
unsigned char time[3] = {0, 0, 0}; // 存储秒表时间,time[0]为百位,time[1]为十位,time[2]为个位
void main()
{
lcd_init(); // 初始化 LCD
timer1_init(); // 初始化定时器1
while(1)
{
lcd_display(1, 1, "Time: ");
lcd_data(time[0] + '0'); // 将数字转换为字符
lcd_data(time[1] + '0');
lcd_data(time[2] + '0');
delay(10); // 延时10毫秒
}
}
void delay(unsigned int time)
{
unsigned int i, j;
for(i = time; i > 0; i--)
for(j = 110; j > 0; j--);
}
void lcd_init()
{
lcd_cmd(0x38); // 8位数据,2行显示,5x7点阵字符
lcd_cmd(0x0c); // 开显示,光标不显示
lcd_cmd(0x06); // 文本不动,光标右移
lcd_cmd(0x01); // 清屏
}
void lcd_cmd(unsigned char cmd)
{
LCD_RS = 0; // RS=0,选择指令寄存器
LCD_RW = 0; // RW=0,写使能
LCD_DATA = cmd; // 将指令写入数据口
LCD_EN = 1; // 使能
delay(1); // 延时1毫秒
LCD_EN = 0; // 禁能
}
void lcd_data(unsigned char dat)
{
LCD_RS = 1; // RS=1,选择数据寄存器
LCD_RW = 0; // RW=0,写使能
LCD_DATA = dat; // 将数据写入数据口
LCD_EN = 1; // 使能
delay(1); // 延时1毫秒
LCD_EN = 0; // 禁能
}
void lcd_display(unsigned char row, unsigned char col, unsigned char *str)
{
unsigned char i = 0;
if(row == 1)
col |= 0x80; // 第一行地址从0x80开始
else
col |= 0xc0; // 第二行地址从0xc0开始
lcd_cmd(col); // 设置光标位置
while(str[i] != '\0') // 在LCD上显示字符串
{
lcd_data(str[i]);
i++;
}
}
void timer1_init()
{
TMOD |= 0x10; // 定时器1为16位自动重载模式
TH1 = 0xfc; // 初始化计数值为65536-5000=60536
TL1 = 0x18;
ET1 = 1; // 允许定时器1中断
EA = 1; // 开总中断
TR1 = 1; // 启动定时器1
}
void timer1_isr() interrupt 3
{
TH1 = 0xfc; // 重置计数值
TL1 = 0x18;
time[2]++; // 增加秒表计时时间
if(time[2] == 10) // 判断个位是否达到10
{
time[2] = 0;
time[1]++; // 增加十位
if(time[1] == 10) // 判断十位是否达到10
{
time[1] = 0;
time[0]++; // 增加百位
}
}
}
```
程序中使用了定时器1来进行秒表计时,每隔10毫秒触发一次中断,将秒表计时时间加1,并将时间显示在LCD上。
阅读全文