51单片机—LCD显示闹钟时间

本文展示了如何使用51单片机编写程序,通过LCD显示器显示实时的闹钟时间,并实现了时间修改和计时功能。程序中包括了LCD初始化、定时器配置以及按键扫描等功能,允许用户通过按键设定和调整时间。
摘要由CSDN通过智能技术生成
#include "./clock.h"

sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;

//ÄÖÖÓʱ¼ä
unsigned char s = 0;
unsigned char m = 0;
unsigned char h = 0;
unsigned char flag = 1;
//
void lcd_write(unsigned char byte, unsigned char flag)
{
    if(flag)
		{
        RS = LCD_WRITE_DATA;
    }
		else
		{
        RS = LCD_WRITE_COM;
    }
		RW = 0;
		E = 1;
		LCDPORT = byte;
		delay_us(5);
		E = 0;
}

void lcd_init()
{
    delay_ms(15);
	  lcd_write(0x38,LCD_WRITE_COM);
	  delay_ms(5);
	  lcd_write(0x38,LCD_WRITE_COM);
 	  delay_ms(5);
	  lcd_write(0x38,LCD_WRITE_COM);
 	  delay_ms(5);
	  lcd_write(0x38,LCD_WRITE_COM);
	  delay_ms(5);
	  lcd_write(0x08,LCD_WRITE_COM);
	  delay_ms(5);
	  lcd_write(0x01,LCD_WRITE_COM);
	  delay_ms(5);
	  lcd_write(0x06,LCD_WRITE_COM);
	  delay_ms(5);
	  lcd_write(0x0c,LCD_WRITE_COM);
	  delay_ms(5);
}
void display1(void)
{
	  lcd_write(0x80+0x40+4,LCD_WRITE_COM);
		lcd_write((h/10)+'0',LCD_WRITE_DATA);
		lcd_write((h%10)+'0',LCD_WRITE_DATA);
		lcd_write(':',LCD_WRITE_DATA);
		lcd_write((m/10)+'0',LCD_WRITE_DATA);
		lcd_write((m%10)+'0',LCD_WRITE_DATA);
		lcd_write(':',LCD_WRITE_DATA);
	  lcd_write((s/10)+'0',LCD_WRITE_DATA);
	  lcd_write((s%10)+'0',LCD_WRITE_DATA);
}
void main()
{
    unsigned char key;
	
	  timer0();
	  lcd_init();
	  timer1();
	  while(1
以下是51单片机lcd显示时间闹钟蜂鸣器的代码示例: ```c #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit beep = P1^5; sbit dula = P2^6; sbit wela = P2^7; uchar code table[] = { 0x3f, // 0 0x06, // 1 0x5b, // 2 0x4f, // 3 0x66, // 4 0x6d, // 5 0x7d, // 6 0x07, // 7 0x7f, // 8 0x6f // 9 }; uchar hour = 10; // 初始时间为10:00 uchar minute = 0; uchar second = 0; uchar alarm_hour = 12; // 初始闹钟时间为12:00 uchar alarm_minute = 0; bit alarm_flag = 0; // 闹钟标志位 void delayms(uint x) { // 毫秒级延时函数 uint i, j; for (i = x; i > 0; i--) { for (j = 110; j > 0; j--); } } void display(uchar hour, uchar minute) { // 在LCD显示时间 uchar shiwei = hour / 10; uchar gewei = hour % 10; P0 = 0xff; wela = 1; wela = 0; P0 = ~(0x01 << 1); dula = 1; dula = 0; P0 = table[shiwei]; wela = 1; wela = 0; P0 = ~(0x01 << 0); dula = 1; dula = 0; P0 = table[gewei]; wela = 1; wela = 0; P0 = ~(0x01 << 3); dula = 1; dula = 0; shiwei = minute / 10; gewei = minute % 10; P0 = 0xff; wela = 1; wela = 0; P0 = ~(0x01 << 5); dula = 1; dula = 0; P0 = table[shiwei]; wela = 1; wela = 0; P0 = ~(0x01 << 4); dula = 1; dula = 0; P0 = table[gewei]; wela = 1; wela = 0; P0 = ~(0x01 << 7); dula = 1; dula = 0; } void main() { TMOD = 0x01; // 设置定时器0为16位定时器 TH0 = 0x3c; // 给定时器0赋初值,定时1ms TL0 = 0xb0; TR0 = 1; // 启动定时器0 ET0 = 1; // 打开定时器0中断 EA = 1; // 打开总中断开关 while (1) { display(hour, minute); if (alarm_flag) { // 闹钟响起 for (int i = 0; i < 1000; i++) { beep = ~beep; delayms(1); } alarm_flag = 0; } } } void timer0() interrupt 1 { // 定时器0中断服务程序 TH0 = 0x3c; TL0 = 0xb0; second++; if (second >= 60) { second = 0; minute++; } if (minute >= 60) { minute = 0; hour++; } if (hour >= 24) { hour = 0; } if (hour == alarm_hour && minute == alarm_minute) { // 判断是否到达设定的闹钟时间 alarm_flag = 1; } } ``` 该代码中使用了定时器0进行时间计数,并通过LCD显示时间。同时设定了闹钟时间,当时间到达设定的闹钟时间时,蜂鸣器会响起。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值