51单片机的数码管语音闹钟电路图程序源码

 

 

晨欣小编

51单片机的数码管语音闹钟电路图程序源码是一种常见的电子设计方案,主要用于制作具有语音提示功能的闹钟。通过该设计方案,用户可以根据自己的需要设置闹钟时间,并在设定时间到达时,数码管会显示闹钟时间,并且通过语音提示来提醒用户。

电路图中主要包括51单片机、数码管、语音模块、时钟模块等组件。通过这些组件的协调工作,实现了闹钟的功能。

接下来是程序源码部分,源码的编写决定了闹钟功能的实现方式。以下是一个简单的闹钟程序源码示例:

```C
#include

sbit K1 = P1^0; //设定闹钟按钮
sbit K2 = P1^1; //确认按钮
sbit SPK = P2^0; //蜂鸣器
sbit LSA = P2^2; //数码管控制引脚LSA
sbit LSB = P2^3; //数码管控制引脚LSB
sbit LSC = P2^4; //数码管控制引脚LSC

unsigned char code smgduan[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //数码管显示0-9
unsigned char code display[8] = {0, 0, 0, 0, 0, 0, 0, 0}; //数码管值
unsigned char code alarm[4] = {0, 0, 0, 0}; //闹钟时间

void delay(unsigned int i) //延时函数
{
unsigned int j, k;
for (j = i; j > 0; j--)
{
for (k = 110; k > 0; k--)
;
}
}

void init() //初始化函数
{
TMOD = 0x01; //定时器T0工作方式1
TH0 = (65536 - 1000) / 256; //设置定时初值
TL0 = (65536 - 1000) % 256; //设置定时器初值
EA = 1; //打开总中断
ET0 = 1; //打开T0中断
TR0 = 1; //启动T0
}

void display_alarm() //数码管显示函数
{
unsigned char i;
for (i = 0; i < 8; i++)
{
switch (i)
{
case (0): //显示小时的十位
LSA = 0;
LSB = 0;
LSC = 0;
break;
case (1): //显示小时的个位
LSA = 1;
LSB = 0;
LSC = 0;
break;
case (2): //显示分的十位
LSA = 0;
LSB = 1;
LSC = 0;
break;
case (3): //显示分的个位
LSA = 1;
LSB = 1;
LSC = 0;
break;
case (4): //显示秒的十位
LSA = 0;
LSB = 0;
LSC = 1;
break;
case (5): //显示秒的个位
LSA = 1;
LSB = 0;
LSC = 1;
break;
case (6): //显示闹钟标志
LSA = 0;
LSB = 1;
LSC = 1;
break;
case (7): //显示闹钟时间
LSA = 1;
LSB = 1;
LSC = 1;
break;
}
P0 = smgduan[display[i]];
delay(2); //延时
P0 = 0x00; //消隐
}
}

void alarm_clock() interrupt 1 //定时器T0中断函数
{
static unsigned int cnt; //定时计数
TH0 = (65536 - 1000) / 256;
TL0 = (65536 - 1000) % 256;
cnt++;
if (cnt >= 200)
{
cnt = 0;
display[0] = alarm[0] / 10; //小时的十位
display[1] = alarm[0] % 10; //小时的个位
display[2] = alarm[1] / 10; //分钟的十位
display[3] = alarm[1] % 10; //分钟的个位
display[4] = alarm[2] / 10; //秒的十位
display[5] = alarm[2] % 10; //秒的个位
display[6] = 0; //闹钟标志
if (display[0] == display[6] && display[1] == display[7] && display[2] == display[4] && display[3] == display[5]) //闹钟时间到
{
SPK = 0; //蜂鸣器响
}
else
{
SPK = 1; //关闭蜂鸣器
}
display_alarm(); //显示数据
}
}

void main()
{
init(); //初始化
while (1)
{
if (K1 == 0) //设置闹钟时间
{
delay(5);
if (K1 == 0)
{
alarm[0]++; //小时加1
if (alarm[0] >= 24)
alarm[0] = 0;
display[6] = 1; //显示闹钟标志
}
while (K1 == 0)
;
}
if (K2 == 0) //确认
{
delay(5);
if (K2 == 0)
{
display[7] = 1; //显示闹钟时间
}
while (K2 == 0)
;
}
}
}
```

以上是一个简单的51单片机数码管语音闹钟电路图程序源码示例,可以根据实际需求进行修改和完善。希望对需要的朋友有所帮助。

 

推荐大牌

收起 展开
客服服务
我的专属客服
工作时间

周一至周六:09:00-12:00

13:30-18:30

投诉电话:0755-82566015

关注微信

扫码关注官方微信,先人一步知晓促销活动

0 优惠券 0 购物车 BOM配单 我的询价 TOP