音乐门铃c语言程序

合集下载

单片机门铃设计

单片机门铃设计

单片机门铃设计随着人们生活水平的提高,门铃在人们的日常生活中扮演着越来越重要的角色。

单片机门铃设计,不仅可以满足基本的门铃功能,还可以实现一些更智能化、个性化的需求。

本文将介绍一种基于单片机的门铃设计方案,包括硬件和软件两部分。

单片机门铃设计的电路主要由单片机、按键、扬声器和LED等组成。

其中,单片机选用AT89C51,它具有价格便宜、使用广泛等特点。

按键用于触发门铃,扬声器用于发出声音,LED用于显示门铃状态。

单片机门铃设计的电路原理图如图1所示。

当按键被按下时,单片机接收到信号,触发扬声器发出声音,同时LED显示门铃状态。

单片机门铃设计的程序设计语言采用C语言。

C语言具有可读性强、易于维护等特点,能够满足单片机门铃设计的需求。

单片机门铃设计的程序流程图如图2所示。

当按键被按下时,程序进入中断处理函数,通过调用一个播放声音的函数来触发扬声器发出声音,同时更新LED显示状态。

在实验中,我们首先搭建了硬件电路,然后编写了单片机门铃设计的程序并烧录到单片机中。

在按键被按下时,我们听到了清脆的铃声,并且LED灯亮起,表示门铃已经触发。

通过实验,我们验证了单片机门铃设计的可行性和实用性。

该设计方案不仅实现了基本的门铃功能,还具有智能化、个性化的特点。

由于采用了单片机控制,该门铃还具有安装方便、调试简单等优点。

本文介绍了一种基于单片机的门铃设计方案。

该方案通过软硬件结合的方式实现了智能化、个性化的门铃功能,具有较高的实用价值和应用前景。

同时,该设计方案也具有一定的创新性和探索性,为其他嵌入式系统的设计提供了参考和借鉴。

智能门铃系统设计:基于51单片机的创新方案随着科技的不断发展,智能家居成为了现代生活的新宠。

其中,智能门铃系统作为智能家居的重要组成部分,具有方便、实用、安全等优点。

本文基于51单片机,设计了一种智能门铃系统,旨在提高家居安全性和生活品质。

传统的门铃系统一般由普通单片机或嵌入式系统作为主控芯片,通过按键或感应器触发铃声输出。

单片机音乐门铃课程设计报告书

单片机音乐门铃课程设计报告书

课程设计报告课程名称: SCM -音乐门铃目录一、功能2.设计步骤3. 预期结果4、硬件电路设计:1.最小系统2.外围电路3.组件列表5.软件设计:1. 流程图2. 计划清单6.调试:结论、实拍、感受音乐门铃设计摘要:本设计89C是一款由AT51芯片组成的音乐门铃解决方案。

在系统硬件电路设计编制依据上,实现了电子门铃系统的软件设计。

系统设计主要包括电源、按键模块等。

经过系统测试,证明满足设计要求。

1.功能单片机编程播放歌曲《两只老虎》。

2.设计步骤1前期工作通过对单片机的学习,可以通过keilC软件编写C语言程序,并且可以在Proteus仿真软件上成功运行。

2电路结构音乐门铃的硬件电路由6部分组成:单片机、时钟和复位电路、选择键输入电路、音频发生器、音频放大器和扬声器。

音乐门铃的硬件电路设计框图如下。

图2-1 音乐门铃硬件电路设计框图3 基本步骤先用C语言编写程序代码实现音乐门铃,然后用C语言将keil软件生成的hex文件下载到stc89c51集成芯片中,用不同的频率发出不同的音调,用延时产生不同的节拍,并传输他们通过功率放大器连接到扬声器,使其播放好听的音乐。

4 预期结果按下门铃按钮,也就是和普通门铃的工作方法一样,AT89C51控制蜂鸣器发出优美的音乐,提醒主人开门。

三、音乐门铃的硬件设计1 最低系统2 外围电路4 音乐门铃软件设计1 程序流程图2 计划清单组织机构0000H;LJMP ZCX;组织机构001BH;LJMP ZDFWCX;组织机构0100H;中信证券:移动TMOD,#10H;SETB ET1;SETB EA;ZCXY:移动60H,#00H;QJPCX:MOV A,60H;MOV DPTR,#JPMB;MOVC A,A+DPTR;MOV R1,A;JZ ZCXXH;ANL A,#0FH;MOV R6,A;MOV A,R1;交换一个;ANL A,#0FH;JNZ YFCLCX;AJMP QJPXH; YFCLCX:十二月一;移动22H,A;RL一;MOV DPTR,#PLZB; MOVC A,A+DPTR; 移动TH1,A;移动21H,A; MOV A,22H;RL一;公司A;MOVC A,A+DPTR; 移动TL1,A;移动20H,A; SETB TR1;QJPXH:LCALL YSCX;INC 60H;AJMP QJPCX; ZCXXH:CLR TR1;ZDFWCX:推加速;推PSW;移动TH1,21H;MOV TH1,20H;CPL P1.0;POP PSW;流行音乐节;视网膜病变;YSCX:MOV R5,#2;YSCXDYXH:MOV R4,#187;YSCXDEXH:MOV R3,#248;DJNZ R3,$;DJNZ R4,YSCXDEXH;DJNZ R5,YSCXDYXH;DJNZ R6,YSCX;RET;PLZB:DW 64580、64684、64777、64820;DW 64898、64968、65030;JPMB:DB 14H、24H、34H、14H;DB 14H、24H、34H、14H;DB 34H、44H、58H;DB 34H、44H、58H;DB 52H、62H、52H、42H、34H、14H;DB 52H、62H、52H、42H、34H、14H;DB 14H、54H、18H;DB 14H、54H、18H、00H;结尾;5调试实物图5感觉作为一个自动化专业的大三学生,我觉得做这个设计是非常有意义和必要的。

(完整word版)基于单片机的电子音乐门铃设计任务.docx

(完整word版)基于单片机的电子音乐门铃设计任务.docx

微机控制系统应用方向学年设计任务书学院课程名称完成期限计算机与信息工程学院专业计算机科学与技术微机控制系统应用方向题目基于单片机的电子音乐门铃自 2013 年 7 月 3 日至 2013 年 8 月 29 日共8周一、项目的目的基于单片机的电子音乐门铃设计,强化动手能力,为毕业设计做准备。

二、项目任务的主要内容和要求1.用 I/O 口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(至少三首乐曲,每首不少于 30 秒)内 2.客人可通过门铃按键器播放音乐,并显示等待时间。

容3.如果主人在家,可暂停并取消音乐播放。

及三、项目设计(研究)思路通过仿真软件 PROTUES 实现要求的硬件电路图,晶振电路、最小系统、任数码管、按键、蜂鸣器等;软件实现按键事件、音乐播放、数码管显示务等;首先实现硬件电路图,再软件处理的时候,通过中断和定时器,实现按键请求处理和计时显示处理,对于两个定时器T0 和 T1 同时使用不是很熟悉,刚开始二者总是不能同时实现,通过针对性测试和查找资料,最终实现。

四、具体成果形式和要求通过 PROTUES 仿真电路图展示项目主要功能。

起止日期工作内容进度7.4--7.5召开小组会议,讨论设计的主要内容,进行明确的分工;7.6--8.23查找参考资料,解决相关问题;安排8.23--8.26完成仿真电路图和实现代码;8.26--8.28书写设计文档。

主要参考资料指导教师意见系(教研室)主任意见1.彭伟 .单片机 C 语言程序设计实训 100 例[M], 电子工业出版社 ,2009.6.2.谭浩强 .C 语言程序设计(第二版) [M], 北京 :清华大学出版社 ,1991.3.李建忠 .单片机原理及应用 [M], 西安电子科技大学出版社 ,2008.2.(签字):年月日(签字):年月日微机控制系统应用方向学年设计说明书学院名称:班级名称:学生姓名:计算机与信息工程学院计科 101祖杰、赵雷、周来宇、朱路平、张毅苗学号:2010211154、2010211150、2010211151、2010211153、2010211147题目:基于单片机的电子音乐门铃设计指导教师姓名:董再秀起止日期:2013.07.03--2013.08.29目录第一部分:正文部分 (1)1 绪论 (1)1.1研究背景 (1)1.2主要工作 (1)1.3研究内容 (1)2 系统总体方案 (1)2.1系统组成框图 (1)2.2音乐门铃的功能结构图. (2)3 硬件设计 (2)3.1各部分硬件设计及其原理. (2)3.1.1 AT89C51简介 (2)3.1.2 时钟振荡电路 (3)3.2硬件电路图及功能 (3)4 软件设计 (4)4.1音调的确定 (4)4.2节拍的确定 (5)4.3编码 (6)5 调试 (7)5.1检查硬件连接 (7)5.2检查软件系统 (7)5.3测试结果 (7)总结 (8)致谢 (8)第二部分:参考文献 (9)附录 A 源代码及注释 (10)第三部分:指导教师评语 (15)第四部分:成绩评定 (15)第一部分:正文部分1绪论1.1研究背景随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。

用C语言写的一个PIC16F877的时闹钟程序

用C语言写的一个PIC16F877的时闹钟程序

用C语言写的一个PIC16F877的时闹钟程序单片机用16F877,主时钟用20MHz,用32768作定时时间。

可以实现2路定闹,每一路都可分别设置和开关,采用4x4键盘,16x2的字符型LCD显示。

连线在程序开头有说明。

程序的功能:(1)上电后LCD背光打开,并显示倒计时5秒,然后时钟开始工作。

(2)用模式键(*)切换模式,如显示时间、日期、闹钟1、闹钟2等,并且可以用上、下键控制加1、减1或是闹钟的On、Off。

(3)原程序有16个键,包括0~9数字键,可以直接输入要设置的时间值,但后来将数字键取消了,你仍然可以通过修改程序的部分注释恢复此功能。

(4)闹钟有2路,时间到后闹2分钟,可按任意键取消本次闹钟。

闹钟响时有2种音调,是用PIC的PWM实现的。

(5)按任意键可打开背光,1分钟后自动关闭背光。

(6)RA0~RA3为按键扫描输入,应接下拉电阻。

主程序// FileName: Main.c// MCU: Microchip PIC16F877// Tool: CCS-C compiler// Author: KingEDA, MSN:kingeda@, skype:kingeda, E-mail:kingeda@// Website: // Description:// A timer program// Ver 0.1: 2003-03-31, all clock function with date display, 2 way alarm.// Ver 0.2: 2003-05-05, (1) Alarm default is on,modify alarm1 time to 7:00:00,// and alarm2 to 13:30:00.// (2) Backlight will be enabled when alarming.// (3) Automatic adjust day(28,30,31).// (4) Automatic move cursor to next location when set item.// PIN Connection:// RC0~1 : 32768Hz crystal// RC2 : Buzzer// RC3 : LCD Back Light,drive a PNP BJT// RD0~RD7 : to LCD DB0~DB7// RA0~RA3 : keypad col in// RC4~RC7 : keypad line out// 7 8 9 #// 4 5 6 ↑// 1 2 3 ↓// 0 ←→*// RE0 : LCD RS// RE1 : LCD RW// RE2 : LCD E#include "my16f877.h"#device ICD=true//#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT #use delay(clock = 24000000)//#use fast_io(C)#use fast_io(E)#define lcd_busy (lcd_read_addr()&0x80) == 0x80#define time_start_addr 0x80+0x04#define time_hourh_addr time_start_addr#define time_hourl_addr time_start_addr+1#define time_minuteh_addr time_start_addr+3#define time_minutel_addr time_start_addr+4#define time_secondh_addr time_start_addr+6#define time_secondl_addr time_start_addr+7#define key_0 0x11#define key_1 0x21#define key_2 0x22#define key_3 0x24#define key_4 0x41#define key_5 0x42#define key_6 0x44#define key_7 0x81#define key_8 0x82#define key_9 0x84#define key_left 0x12#define key_right 0x14#define key_up 0x48#define key_down 0x28#define key_mode 0x18#define key_cancel 0x88char StrPower1[] = " * Power on * ";char StrSetTime[] = " * Adjust time* ";char StrSetDate[] = " * Adjust date* ";char StrAlarm1[] = " * Set alarm 1* ";char StrAlarm2[] = " * Set alarm 2* ";unsigned char PORTC_MAP;#bit BackLightEn = PORTC_MAP.3unsigned char BackLightTimer;int1 led;#bit lcd_rs = PORTE.0#bit lcd_rw = PORTE.1#bit lcd_e = PORTE.2#byte lcd_bus = PORTD#byte lcd_dir = TRISD#define PWM_on 0x0c#define PWM_off 0x00#define PWM_period 200#define PWM_DC 100unsigned char lcd_addr;unsigned char KeyLine;unsigned char KeyOld;unsigned char KeyNew;struct mTime {unsigned char hourh; // hour,0~23unsigned char hourl;unsigned char minuteh; // minute,0~59unsigned char minutel;unsigned char secondh; // second,0~59unsigned char secondl;};struct mTime CurrentTime = {1,2,0,0,0,0};struct mTime AlarmTime1 = {0,7,0,0,0,0}; // 07:00:00 struct mTime AlarmTime2 = {1,3,3,0,0,0}; // 13:30:00 unsigned char AlarmStatus;#bit Alarm1Enable = AlarmStatus.0#bit Alarm2Enable = AlarmStatus.1#bit Alarm1Alarm = AlarmStatus.2#bit Alarm2Alarm = AlarmStatus.3unsigned char Alarm1Cnt; // alarm1 second count unsigned char Alarm2Cnt;unsigned char CurrentMode;#define mode_time 0#define mode_set_time 1#define mode_set_date 2#define mode_set_alarm1 3#define mode_set_alarm2 4unsigned char adjust_item;struct mDate {unsigned char year1; //unsigned char year2;unsigned char year3;unsigned char year4;unsigned char monthh;unsigned char monthl;unsigned char dayh;unsigned char dayl;};struct mDate CurrentDate = {2,0,0,3,0,1,0,1}; unsigned char *pStr;// ------------------------------------------------------- unsigned char lcd_read_addr(){unsigned char ch;lcd_dir = 0xff; // read from lcdlcd_rs = 0;lcd_rw = 1; // instlcd_e = 1;#asmnopnopnop#endasmch = lcd_bus;lcd_e = 0;lcd_dir = 0x00; // set write to lcdreturn ch;}// ------------------------------------------------------- unsigned char lcd_write_data(unsigned char ch) {while (lcd_busy){ restart_wdt(); }lcd_rs = 1; // datalcd_rw = 0; // writelcd_bus = ch; // write outlcd_e = 1;#asmnopnopnop#endasmlcd_e = 0;return 'Y';}// ------------------------------------------------------- unsigned char lcd_write_inst(unsigned char ch) {while (lcd_busy){ restart_wdt(); }lcd_rs = 0; // instlcd_rw = 0; // writelcd_bus = ch;lcd_e = 1;#asmnopnopnop#endasmlcd_e = 0;return 'Y';}// ------------------------------------------------------- unsigned char lcd_read_data(){unsigned char ch;while (lcd_busy){ restart_wdt(); }lcd_dir = 0xff; // read from lcdlcd_rs = 1; // datalcd_rw = 1; // readlcd_e = 1;#asmnopnopnop#endasmch = lcd_bus; // read inlcd_e = 0;lcd_dir = 0x00; // set write to lcdreturn ch;}// ------------------------------------------------------- void lcd_init(){unsigned char Tempch;lcd_addr = 0;delay_ms(100);Tempch = 0x38; // 1-line mode,5x8 dotslcd_write_inst(Tempch); // Function setTempch = 0x0f; // lcd on,cursor on,blink onlcd_write_inst(Tempch); // Display on/offTempch = 0x06; // Increment mode,Entire shift offlcd_write_inst(Tempch);Tempch = 0x01; // clear displaylcd_write_inst(Tempch);delay_ms(3);}// -------------------------------------------------------//#int_timer1//void timer1_interrupt(void)#int_ccp2void ccp2_interrupt(void){//TMR1H = 0x80;if (CurrentTime.secondl==9){CurrentTime.secondl=0;if (CurrentTime.secondh==5){CurrentTime.secondh=0;if (CurrentTime.minutel==9){CurrentTime.minutel=0;if (CurrentTime.minuteh==5){CurrentTime.minuteh=0;if (CurrentTime.hourl==9){CurrentTime.hourl=0;CurrentTime.hourh++;}else if((CurrentTime.hourl==3) && (CurrentTime.hourh==2)){CurrentTime.hourl=0;CurrentTime.hourh=0;if ((((CurrentDate.dayl == 8) || (CurrentDate.dayl == 9)) && (CurrentDate.dayh == 2) && (CurrentDate.monthl == 2) && (CurrentDate.monthh == 0)) ||((CurrentDate.dayl == 0) && (CurrentDate.dayh == 3) && ((((CurrentDate.monthl == 4) || (CurrentDate.monthl == 6)|| (CurrentDate.monthl == 9)) && (CurrentDate.monthh == 0)) || ((CurrentDate.monthl == 1) && (CurrentDate.monthh == 1)))) ||((CurrentDate.dayl == 1) && (CurrentDate.dayh == 3))){CurrentDate.dayl=1;CurrentDate.dayh=0;if ((CurrentDate.monthl == 2) && (CurrentDate.monthh == 1)){CurrentDate.monthl = 1;CurrentDate.monthh = 0;if (CurrentDate.year4 == 9){CurrentDate.year4 = 0;if (CurrentDate.year3 == 9){CurrentDate.year3 = 0;if (CurrentDate.year2 == 9){CurrentDate.year2 = 0;CurrentDate.year1++;}elseCurrentDate.year2++;}elseCurrentDate.year3++;}elseCurrentDate.year4++;}else if(CurrentDate.monthl == 9){CurrentDate.monthl = 0;CurrentDate.monthh++;}elseCurrentDate.monthl++;}else if(CurrentDate.dayl == 9){CurrentDate.dayl=0;CurrentDate.dayh++;}elseCurrentDate.dayl++;}elseCurrentTime.hourl++;}elseCurrentTime.minuteh++;}elseCurrentTime.minutel++;}elseCurrentTime.secondh++;}elseCurrentTime.secondl++;if ((Alarm1Alarm == false) & (Alarm2Alarm == false)){led = 0;CCP1CON = PWM_off;}else{if (led == 1){led = 0;PR2 = PWM_period; // set pwm periodCCPR1L = PWM_DC; // set pwm duty cycle//CCP1CON = PWM_on;}else{led = 1;PR2 = PWM_period/2; // set pwm periodCCPR1L = PWM_DC/2; // set pwm duty cycle//CCP1CON = PWM_off;}}Alarm1Cnt++;Alarm2Cnt++;if (BackLightEn == 0)if (((BackLightTimer++)>=60) & (Alarm1Alarm == false) & (Alarm1Alarm == false))BackLightEn = 1; // disable backlight PORTC = PORTC_MAP;//TMR1IF = 0;//PIR1 = PIR2 = 0x00;CCP2IF = 0;}// ------------------------------------------------------- unsigned char get_key(void){unsigned char key_in,tmp;TRISC = 0x03;KeyLine = 0xf0;PORTC = KeyLine | PORTC_MAP;#asmnopnopnop#endasmif ((PORTA & 0x0f) != 0){tmp = 0x10;for (KeyLine = tmp;KeyLine!=0;KeyLine = tmp){PORTC = KeyLine | PORTC_MAP;tmp = KeyLine <<1;#asmnopnopnop#endasmkey_in = PORTA & 0x0f;if (key_in != 0){return (key_in | KeyLine);}}return 0;}elsereturn 0;}// -------------------------------------------------------void set_mode(void){if (CurrentMode == mode_set_alarm2)CurrentMode = mode_time;else{CurrentMode++;adjust_item = 0;}lcd_write_inst(0x01); // clear LCD displaylcd_write_inst(time_start_addr); // set LCD line1 if (CurrentMode == mode_set_time){lcd_write_data(CurrentTime.hourh + '0');lcd_write_data(CurrentTime.hourl + '0');lcd_write_data(':');lcd_write_data(CurrentTime.minuteh + '0');lcd_write_data(CurrentTime.minutel + '0');lcd_write_data(':');lcd_write_data(CurrentTime.secondh + '0');lcd_write_data(CurrentTime.secondl + '0');pStr = StrSetTime;}else if(CurrentMode == mode_set_date){lcd_write_data(CurrentDate.year1 + '0');lcd_write_data(CurrentDate.year2 + '0');lcd_write_data(CurrentDate.year3 + '0');lcd_write_data(CurrentDate.year4 + '0');lcd_write_data('/');lcd_write_data(CurrentDate.monthh + '0');lcd_write_data(CurrentDate.monthl + '0');lcd_write_data('/');lcd_write_data(CurrentDate.dayh + '0');lcd_write_data(CurrentDate.dayl + '0');pStr = StrSetDate;}else if(CurrentMode == mode_set_alarm1){lcd_write_data(AlarmTime1.hourh + '0');lcd_write_data(AlarmTime1.hourl + '0');lcd_write_data(':');lcd_write_data(AlarmTime1.minuteh + '0');lcd_write_data(AlarmTime1.minutel + '0');lcd_write_data(':');lcd_write_data(AlarmTime1.secondh + '0');lcd_write_data(AlarmTime1.secondl + '0');lcd_write_data(' ');lcd_write_data('O');if (Alarm1Enable){lcd_write_data('n');}else{lcd_write_data('f');lcd_write_data('f');}pStr = StrAlarm1;Alarm1Cnt =0;}else if(CurrentMode == mode_set_alarm2) {lcd_write_data(AlarmTime2.hourh + '0');lcd_write_data(AlarmTime2.hourl + '0');lcd_write_data(':');lcd_write_data(AlarmTime2.minuteh + '0');lcd_write_data(AlarmTime2.minutel + '0');lcd_write_data(':');lcd_write_data(AlarmTime2.secondh + '0');lcd_write_data(AlarmTime2.secondl + '0');lcd_write_data(' ');lcd_write_data('O');if (Alarm2Enable){lcd_write_data('n');}else{lcd_write_data('f');lcd_write_data('f');}pStr = StrAlarm2;Alarm2Cnt = 0;}lcd_write_inst(0xc0); // set LCD line2 if (CurrentMode != mode_time){for (;*pStr!=0;pStr++){ // write hint messagelcd_write_data(*pStr);}lcd_write_inst(0x0f); // LCD cursor onlcd_write_inst(time_start_addr); // move cursor to start }else // time mode,write date to second line{lcd_write_inst(0x0c); // LCD sursor off/* lcd_write_inst(0xc0 + 3); // set date start address lcd_write_data(CurrentDate.year1 + '0');lcd_write_data(CurrentDate.year2 + '0');lcd_write_data(CurrentDate.year3 + '0');lcd_write_data(CurrentDate.year4 + '0');lcd_write_data('/');lcd_write_data(CurrentDate.monthh + '0');lcd_write_data(CurrentDate.monthl + '0');lcd_write_data('/');lcd_write_data(CurrentDate.dayh + '0');lcd_write_data(CurrentDate.dayl + '0');*/ }if (CurrentMode == mode_set_time){lcd_write_inst(time_start_addr); // move cursor to start }else if (CurrentMode == mode_set_date){lcd_write_inst(time_start_addr); // move cursor to start }else if (CurrentMode == mode_set_alarm1){lcd_write_inst(time_secondl_addr+3);adjust_item = 6;}else if (CurrentMode == mode_set_alarm2){lcd_write_inst(time_secondl_addr+3);adjust_item = 6;}else{lcd_write_inst(0x0c); // LCD cursor off}}// ------------------------------------------------------- void set_date(void){if (adjust_item == 0) // adjust year{if ((KeyNew >=0) & (KeyNew <= 9)){CurrentDate.year1 = KeyNew;lcd_write_data(CurrentDate.year1 + '0');//lcd_write_inst(time_start_addr);adjust_item ++;}else if (KeyNew == key_left){adjust_item = 7;lcd_write_inst(time_start_addr + 9);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 1);}}else if(adjust_item == 1){if ((KeyNew >=0) & (KeyNew <= 9)){CurrentDate.year2 = KeyNew;lcd_write_data(CurrentDate.year2 + '0');//lcd_write_inst(time_start_addr + 1);adjust_item ++;}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 0);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 2);}}else if(adjust_item == 2){if ((KeyNew >=0) & (KeyNew <= 9)){CurrentDate.year3 = KeyNew;lcd_write_data(CurrentDate.year3 + '0');//lcd_write_inst(time_start_addr + 2);adjust_item ++;}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 1);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 3);}}else if(adjust_item == 3){if ((KeyNew >=0) & (KeyNew <= 9)){CurrentDate.year4 = KeyNew;lcd_write_data(CurrentDate.year4 + '0');//lcd_write_inst(time_start_addr + 3);adjust_item ++;lcd_write_inst(time_start_addr + 5);}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 2);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 5);}}else if(adjust_item == 4)if (((CurrentDate.monthl>2) & (KeyNew == 0)) | ((CurrentDate.monthl == 0) & (KeyNew == 1))| (((CurrentDate.monthl == 1) | (CurrentDate.monthl == 2)) & (KeyNew <2))) {CurrentDate.monthh = KeyNew;lcd_write_data(CurrentDate.monthh + '0');//lcd_write_inst(time_start_addr + 5);adjust_item ++;}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 3);}else if (KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 6);}}else if(adjust_item == 5){if (((CurrentDate.monthh == 3) & (KeyNew <2)) | ((CurrentDate.monthh != 3) & (KeyNew >=0) & (KeyNew <=9))){CurrentDate.monthl = KeyNew;lcd_write_data(CurrentDate.monthl + '0');//lcd_write_inst(time_start_addr + 6);adjust_item ++;lcd_write_inst(time_start_addr + 8);}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 5);}else if (KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 8);}}else if(adjust_item == 6)if (((CurrentDate.dayl>1) & ((KeyNew == 1) | (KeyNew == 2))) | ((CurrentDate.dayl == 0) & (KeyNew >0) & (KeyNew<4))| ((CurrentDate.dayl == 1) & (KeyNew <4))){CurrentDate.dayh = KeyNew;lcd_write_data(CurrentDate.dayh + '0');//lcd_write_inst(time_start_addr + 8);adjust_item ++;}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 6);}else if (KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 9);}}else if(adjust_item == 7){if (((CurrentDate.dayh == 3) & (KeyNew <2)) | ((CurrentDate.dayh != 3) & (KeyNew >=0) & (KeyNew <=9))){CurrentDate.dayl = KeyNew;lcd_write_data(CurrentDate.dayl + '0');//lcd_write_inst(time_start_addr + 9);adjust_item ++;lcd_write_inst(time_start_addr + 0);}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 8);}else if (KeyNew == key_right){adjust_item = 0;lcd_write_inst(time_start_addr + 0);}}}// -------------------------------------------------------void set_time(void){if (adjust_item == 0) // set hourh{if (((CurrentTime.hourl <4) & (KeyNew < 3)) | ((CurrentTime.hourl >3) & (KeyNew <2))){CurrentTime.hourh = KeyNew;lcd_write_data(CurrentTime.hourh + '0'); // refresh hourh//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item = 5;lcd_write_inst(time_secondl_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_hourl_addr);}}else if (adjust_item == 1) // set hourl{if (((CurrentTime.hourh == 2) & (KeyNew < 4)) | ((CurrentTime.hourh < 2) & (KeyNew <=9))){CurrentTime.hourl = KeyNew;lcd_write_data(CurrentTime.hourl + '0'); // refresh hourl//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minuteh_addr);}}else if (adjust_item == 2) // set minuteh{if (KeyNew <6){CurrentTime.minuteh = KeyNew;lcd_write_data(CurrentTime.minuteh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourl_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minutel_addr);}}else if (adjust_item == 3) // set minutel{if ((KeyNew >=0) & (KeyNew <=9)){CurrentTime.minutel = KeyNew;lcd_write_data(CurrentTime.minutel + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondh_addr);}}else if (adjust_item == 4) // set secondh{if (KeyNew <6){CurrentTime.secondh = KeyNew;lcd_write_data(CurrentTime.secondh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;&nb, sp; lcd_write_inst(time_minutel_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr);}}else if (adjust_item == 5) // set secondl{if ((KeyNew >=0) & (KeyNew <=9)){CurrentTime.secondl = KeyNew;lcd_write_data(CurrentTime.secondl + '0');//lcd_write_inst(0x10); // move cursor backadjust_item = 0;lcd_write_inst(time_hourh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_right){adjust_item = 0;lcd_write_inst(time_hourh_addr);}}}// -------------------------------------------------------void set_alarm1(void){if (adjust_item == 0) // set hourh{if (((AlarmTime1.hourl <4) & (KeyNew < 3)) | ((AlarmTime1.hourl >3) & (KeyNew <2))){AlarmTime1.hourh = KeyNew;lcd_write_data(AlarmTime1.hourh + '0'); // refresh hourh//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item = 6;lcd_write_inst(time_secondl_addr + 3);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_hourl_addr);}}else if (adjust_item == 1) // set hourl{if (((AlarmTime1.hourh == 2) & (KeyNew < 4)) | ((AlarmTime1.hourh < 2) & (KeyNew <=9))){AlarmTime1.hourl = KeyNew;lcd_write_data(AlarmTime1.hourl + '0'); // refresh hourl//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minuteh_addr);}}else if (adjust_item == 2) // set minuteh{if (KeyNew <6){AlarmTime1.minuteh = KeyNew;lcd_write_data(AlarmTime1.minuteh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourl_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minutel_addr);}}else if (adjust_item == 3) // set minutel{if ((KeyNew >=0) & (KeyNew <=9)){AlarmTime1.minutel = KeyNew;lcd_write_data(AlarmTime1.minutel + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondh_addr);}}else if (adjust_item == 4) // set secondh{if (KeyNew <6){AlarmTime1.secondh = KeyNew;lcd_write_data(AlarmTime1.secondh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minutel_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr);}}else if (adjust_item == 5) // set secondl{if ((KeyNew >=0) & (KeyNew <=9)){AlarmTime1.secondl = KeyNew;lcd_write_data(AlarmTime1.secondl + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondl_addr+3);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr+3);}}else if (adjust_item == 6) // set on/off{if ((KeyNew == key_up) | (KeyNew == key_down)){if (Alarm1Enable){Alarm1Enable =false; // disable alarm1lcd_write_data('f');lcd_write_data('f');}else{Alarm1Enable =true; // enable alarm1lcd_write_data('n');lcd_write_data(' ');}//lcd_write_inst(time_secondl_addr+3);adjust_item = 0;lcd_write_inst(time_hourh_addr);Alarm1Cnt = 0;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondl_addr);}else if(KeyNew == key_right){adjust_item = 0;lcd_write_inst(time_hourh_addr);}}}// -------------------------------------------------------void set_alarm2(void){if (adjust_item == 0) // set hourh{if (((AlarmTime2.hourl <4) & (KeyNew < 3)) | ((AlarmTime2.hourl >3) & (KeyNew <2))){AlarmTime2.hourh = KeyNew;lcd_write_data(AlarmTime2.hourh + '0'); // refresh hourh//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item = 6;lcd_write_inst(time_secondl_addr+3);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_hourl_addr);}}else if (adjust_item == 1) // set hourl{if (((AlarmTime2.hourh == 2) & (KeyNew < 4)) | ((AlarmTime2.hourh < 2) & (KeyNew <=9))){AlarmTime2.hourl = KeyNew;lcd_write_data(AlarmTime2.hourl + '0'); // refresh hourl//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minuteh_addr);}}else if (adjust_item == 2) // set minuteh{if (KeyNew <6){AlarmTime2.minuteh = KeyNew;lcd_write_data(AlarmTime2.minuteh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourl_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minutel_addr);}}else if (adjust_item == 3) // set minutel{if ((KeyNew >=0) & (KeyNew <=9)){AlarmTime2.minutel = KeyNew;lcd_write_data(AlarmTime2.minutel + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondh_addr);}}else if (adjust_item == 4) // set secondh{if (KeyNew <6){AlarmTime2.secondh = KeyNew;lcd_write_data(AlarmTime2.secondh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minutel_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr);}}else if (adjust_item == 5) // set secondl{if ((KeyNew >=0) & (KeyNew <=9)){AlarmTime2.secondl = KeyNew;lcd_write_data(AlarmTime2.secondl + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondl_addr+3);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr+3);}}else if (adjust_item == 6) // set on/off{if ((KeyNew == key_up) | (KeyNew == key_down)){if (Alarm2Enable){Alarm2Enable =false; // disable alarm2lcd_write_data('f');lcd_write_data('f');}else{Alarm2Enable =true; // enable alarm2lcd_write_data('n');lcd_write_data(' ');}//lcd_write_inst(time_secondl_addr+3);adjust_item = 0;lcd_write_inst(time_hourh_addr);Alarm2Cnt = 0;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondl_addr);}else if(KeyNew == key_right){adjust_item = 0;lcd_write_inst(time_hourh_addr);}}}// -------------------------------------------------------void main(void){unsigned char cnt;TRISC = 0x03; // PORTC.3 drive led,low activePORTC_MAP = 0x00;led = 0;BackLightEn = 0;BackLightTimer = 0;PORTC = PORTC_MAP;TRISA = 0xff; // low half byte as keyscan inTRISE = 0x00;ADCON0 = 0x00;ADCON1 = 0x06; // all digital I/Oslcd_init();INTCON = 0x00;lcd_write_inst(0x80); // set lcd ddram addressfor (pStr = StrPower1;*pStr!=0;pStr++){lcd_write_data(*pStr);}lcd_write_inst(0x0c); // LCD cursor offPIR1 = PIR2 = 0x00;T1CON = 0x0f; // T1CON: -- T1CKPS1 T1CPS0 T1OSCEN /T1SYNC TMR1CS TMR1ONTMR1H = 0x80;TMR1L = 0x00;。

实验九 音乐门铃设计

实验九 音乐门铃设计
ANLA,#0FH
MOVR5,A
MOVA,R2
SWAPA
ANLA,#0FH
JNZSING
CLRTR0
JMPD1
SING: DECA
MOV22H,A
RLA
MOVDPTR,#TABLE1
MOVCA,@A+DPTR
MOVTH0,A
MOV21H,A
MOVA,22H
RLA
INCA
MOVCA,@A+DPTR
MOVTL0,A
MOVTL0,20H
MOVTH0,21H
CPLP1.0
POPACC
POPPSW
RETI
DELAY: MOVR7,#02
DELAY0: MOVR4,#187
DELAY1: MOVR3,#248
DJNZR3,$
DJNZR4,DELAY1
DJNZR7,DELAY0
DJNZR5,DELAY
RET
DELAY2: MOVR7,#02
DB 22H,12H,92H,82H,98H,14H,24H,34H,44H,64H,0B4H,64H,32H,52H
DB 62H,0B2H,62H,52H,38H,24H,22H,32H,54H,52H,62H,52H,32H,32H,22H,38H
DB 64H,0B4H,64H,32H,52H,62H,0B2H,62H,52H,38H,22H,22H,22H,32H,52H,52H
MOVNUMBYTE,#02H;发送2字节数据
LCALLIWRNBYTE;调用写2字节数据程序
LCALLDELAY2
SETBTR0
SETBP1.0
MOV30H,#00H
NEXT: MOVA,30H

基于单片机的电子音乐门铃设计.

基于单片机的电子音乐门铃设计.

微机控制系统应用方向学年设计任务书微机控制系统应用方向学年设计说明书学院名称:计算机与信息工程学院班级名称:计科101学生姓名:祖杰、赵雷、周来宇、朱路平、张毅苗学号:2010211154、2010211150、2010211151、2010211153、2010211147题目:基于单片机的电子音乐门铃设计指导教师姓名:董再秀起止日期:2013.07.03--2013.08.29目录第一部分:正文部分 (1)1 绪论 (1)1.1 研究背景 (1)1.2 主要工作 (1)1.3 研究内容 (1)2 系统总体方案 (1)2.1 系统组成框图 (1)2.2 音乐门铃的功能结构图 (2)3 硬件设计 (2)3.1 各部分硬件设计及其原理 (2)3.1.1 AT89C51简介 (2)3.1.2 时钟振荡电路 (3)3.2 硬件电路图及功能 (3)4 软件设计 (4)4.1 音调的确定 (4)4.2 节拍的确定 (5)4.3 编码 (6)5 调试 (7)5.1 检查硬件连接 (7)5.2 检查软件系统 (7)5.3 测试结果 (7)总结 (8)致谢 (8)第二部分:参考文献 (9)附录A 源代码及注释 (10)第三部分:指导教师评语 (15)第四部分:成绩评定 (15)第一部分:正文部分1 绪论1.1 研究背景随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。

传统的门铃由于发音单调,已经不能很好满足人们的需要,不能实现批量生产。

本文设计的音乐门铃是以单片机为核心元件的电子式音乐门铃,体积小,功能强,能演奏和旋音乐,使用方便,并具有一定的商业价值。

人类所接触的信息也在不断增加并且日益复杂。

面对浩如烟海的信息,人们已经能够利用计算机等工具高效准确地对之进行处理,但要想将处理完的信息及时,清晰地传递给别人,还必须通过寻求更加卓越的显示技术来实现。

单片机技术与数码管显示技术的结合,使信息传输交流向着智能可视化方向迅速发展。

基于单片机的门铃控制课程设计(定稿)

基于单片机的门铃控制课程设计(定稿)

课程设计基于单片机的门铃控制基于单片机的门铃控制摘要随着科技的发展,人们的生活越来便捷。

其中单片机的出现让工业和生活有了质的飞跃。

它功能强大,体积小,价格实惠,因而被广泛应用于智能行业。

这次的课程设计就是从学习应用中掌握单片机的编程,仿真调试等技能。

本篇介绍的就是基于单片机的门铃控制,有单片机控制输出频率是扬声器发出“叮咚”的响声。

通过单片机的定时/计数T0,产生700HZ和500HZ两种不同频率。

本次课程设计选用的是单片机AT89C51。

关键词:单片机,ATC51,扬声器,频率,C语言。

Timer Controlling Doorbell Based on AT89C51ABSTRACTAT89C51isasmallsinglechiplaunchedbyATMELcompany,andwecanuseittoa chieveelectronicdoorbellwhichcanplaymusicandhasexternalscreentodisplaywelc omemessageandisanewbelldesign,sothesmallmicrocontrollerisworthyofwidelyus inginintelligentresidentialorintheintelligentbuildingsystem.Proteusisthepowerful EDAsimulationsoftware,ithasrichsimulationcomponents,especiallyitisthedynami csimulationofperipheralswhichgreatlycomplementsdeficienciesofothersimulation software;andtheintroductionofthevirtualtoolboxprovidesaconvenienttestforthesi mulation.Thispaperanalyzesthenew,uniqueusesof51singlechipinsmallsimulationp rocessoranditsperipheralhardware.KEYWORDS:AT89C51,timer,buzzer,LCD1602liquidcrystaldisplay,Proteussimulationsoftware,WA VE6000orKeil805目录摘要 ------------------------------------------------------------------------------------------------------------------------------ 1 摘要(外文)------------------------------------------------------------------------------------------------------------------ 2 绪论 ------------------------------------------------------------------------------------------------------------------------------ 4 1总体方案设计 --------------------------------------------------------------------------------------------------------------- 41.1设计思路 ------------------------------------------------------------------------------------------------------------ 41.2相关软件及说明--------------------------------------------------------------------------------------------------- 42 单片机AT89C51简介 ----------------------------------------------------------------------------------------------------- 62.1单片机及其引脚排列--------------------------------------------------------------------------------------------- 62.2用到的AT89C51各引脚功能简介----------------------------------------------------------------------------- 62.3振荡器特性 --------------------------------------------------------------------------------------------------------- 72.4芯片擦除 ------------------------------------------------------------------------------------------------------------ 7 3系统主要硬件电路设计--------------------------------------------------------------------------------------------------- 83.1 单片机主机系统电路-------------------------------------------------------------------------------------------- 83.1.1原理图器件参数 ----------------------------------------------------------------------------------------- 93.2扬声器电路 -------------------------------------------------------------------------------------------------------- 114 系统软件设计-------------------------------------------------------------------------------------------------------------- 114.1设计思路 ----------------------------------------------------------------------------------------------------------- 114.2电路原理图 ------------------------------------------------------------------------------------------------------- 144.3 C语言程序代码------------------------------------------------------------------------------------------------- 145 PROTEUS简介 ------------------------------------------------------------------------------------------------------------- 166 keil与Proteus的联调分析 ----------------------------------------------------------------------------------------- 166.1硬件调试 ----------------------------------------------------------------------------------------------------------- 166.2软件调试 ----------------------------------------------------------------------------------------------------------- 166.3软硬件联调 -------------------------------------------------------------------------------------------------------- 16 结论 ---------------------------------------------------------------------------------------------------------------------------- 18 参考文献------------------------------------------------------------------------------------------------------------------------ 1 谢辞 ------------------------------------------------------------------------------------------------------------------------------ 2绪论“叮咚”是一款经典且应用广泛的门铃,它价格低廉,方便可靠,响应快速,占有很大的市场。

单片机叮咚门铃课程设计

单片机叮咚门铃课程设计

单片机叮咚门铃课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理和功能,掌握叮咚门铃的制作所需的基础知识。

2. 学生能描述单片机编程中的基本指令和逻辑控制流程,理解其在门铃功能实现中的作用。

3. 学生了解并掌握叮咚门铃电路的组成,能够识别并使用相关电子元件。

技能目标:1. 学生能够运用所学的单片机知识,独立设计并完成一个具有叮咚声音的门铃电路。

2. 学生通过实践操作,提升动手能力,能够正确焊接电路板,进行程序烧写和调试。

3. 学生能够运用问题解决策略,对门铃制作过程中遇到的技术问题进行诊断和修复。

情感态度价值观目标:1. 学生通过参与课程,培养对电子技术和编程的兴趣,增强学习信息技术的热情。

2. 学生在小组合作中培养团队精神和沟通能力,学会尊重他人意见,共同解决问题。

3. 学生通过实践活动,认识到科技在日常生活的作用,增强创新意识和实践能力,形成积极的科学态度。

二、教学内容1. 单片机基础知识:介绍单片机的结构、工作原理,重点讲解AT89C51单片机的内部资源及其编程方法。

- 教材章节:第3章《单片机原理及其应用》2. 基本编程指令:讲解单片机C语言编程基础,包括数据类型、运算符、控制语句等。

- 教材章节:第4章《单片机C语言程序设计》3. 电路设计:分析并设计叮咚门铃电路,包括电源、按键、蜂鸣器、单片机及其外围电路。

- 教材章节:第2章《电子电路基础》4. 程序设计:编写叮咚门铃程序,实现按键控制蜂鸣器发出叮咚声。

- 教材章节:第5章《单片机接口技术及其编程》5. 实践操作:指导学生焊接电路板,烧写程序并进行调试,确保门铃功能正常。

- 教材章节:第6章《单片机实践操作与综合应用》6. 评价与改进:对完成的门铃作品进行评价,讨论优缺点,引导学生进行改进和创新。

- 教材章节:第7章《单片机项目评价与优化》教学内容安排与进度:共4课时1. 第1课时:单片机基础知识学习,明确课程目标。

2. 第2课时:基本编程指令学习,分析电路设计。

任务书015 音乐门铃的设计

任务书015 音乐门铃的设计

天津城建大学课程设计任务书2014 —2015 学年第1 学期控制与机械工程学院建筑电气与智能化专业11卓越班级课程设计名称:单片机原理及应用A课程设计设计题目:音乐门铃的设计完成期限:自2014 年9 月22 日至2014 年9 月26 日共 1 周设计依据、要求及主要内容(可另加附页):一、课程设计的目的1、进一步熟悉和掌握单片机的结构及工作原理。

2、掌握单片机的接口技术及相关外围芯片的外特性,控制方法。

3、通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术。

4、通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。

5、通过完成一个包括电路设计和程序开发的完整过程,了解开发一单片机应用系统的全过程,为今后从事相应打下基础。

二、课程设计的基本要求1、认真认识设计的意义,掌握设计工作程序,学会使用工具书和技术参考资料,并培养科学的设计思想和良好的设计作风。

2、提高模型建立和设计能力,学会应用相关设计资料进行设计计算的方法。

3、提高独立分析、解决问题的能力,逐步增强实际应用训练。

4、课程设计的说明书要求简洁、通顺,计算正确,图纸表达内容完整、清楚、规范。

5、课程设计说明书封面格式要求见《天津城市建设学院课程设计教学工作规范》附表1。

三、课程设计具体要求1、要求每位同学独立完成设计任务。

2、原理图设计。

1)原理图设计要符合项目的工作原理,连线要正确。

2)图中所使用的元器件要合理选用,电阻,电容等器件的参数要正确标明。

3)原理图要完整,CPU,外围器件,扩器接口,输入/输出装置要一应俱全。

3、程序调计1)根据要求,将总体项能分解成若干个子功能模块,每个功能模块完成一个特定的功能。

2)根据总体要求及分解的功能模块,确定各功能模块之间的关系,设直出完整的程序流程图。

4、设计说明书1)原理图设计说明简要说明设计目的,原理图中所使用的元器件功能及在图中的作用,各器件的工作过程及顺序。

2)程序设计说明对程序设计总体功能及结构进行说明,对各子模块的功能以及各子模块之间的关系作较详细的描述。

用 C 语言编写一个闹钟程序

用 C 语言编写一个闹钟程序

要用C 语言编写一个闹钟程序,你需要按照以下步骤进行:
包含必要的头文件:首先,你需要包含<time.h> 和<unistd.h> 两个头文件。

这两个头文件将为你提供时间和睡眠函数,这些函数是实现闹钟功能所必需的。

输入闹钟时间:接下来,你需要让用户输入闹钟的触发时间。

你可以使用scanf() 函数来获取用户输入。

计算睡眠时间:接下来,你需要计算出当前时间和闹钟触发时间之间的时间差,并使用睡眠函数等待该时间差。

你可以使用time() 函数获取当前时间,并使用difftime() 函数计算时间差。

你还可以使用sleep() 函数来等待相应的时间。

播放提醒声音:最后,你需要在闹钟触发时向用户播放一个提醒声音。

你可以使用system() 函数来执行一个系统命令,播放提醒声音。

示例代码如下:
#include <time.h>
#include <unistd.h>
#include <stdio.h>
int main() {
// 输入闹钟时间
int hour, minute;
printf("请输入闹钟时间(小时。

门铃设计实训报告

门铃设计实训报告

一、实训目的本次门铃设计实训旨在通过实践操作,加深对单片机原理、编程技术和电子电路设计的理解,培养学生的实际动手能力和创新思维。

通过设计一款基于单片机的电子门铃,使学生掌握电子电路的搭建、编程调试以及系统调试的方法。

二、实训内容1. 硬件设计(1)选择合适的单片机:本设计选用AT89C51单片机作为核心控制单元。

(2)设计电路原理图:包括单片机、按键、蜂鸣器、数码管等元器件的连接。

(3)元器件选型:选择合适的按键、蜂鸣器、数码管等元器件。

2. 软件设计(1)编程语言:采用C语言进行编程。

(2)编写程序:编写控制单片机实现门铃功能的程序,包括按键扫描、音乐播放、数码管显示等模块。

3. 系统调试(1)硬件调试:搭建电路,连接元器件,检查电路连接是否正确。

(2)软件调试:将程序烧录到单片机中,进行调试,确保程序正常运行。

(3)系统联调:将硬件和软件结合起来,进行整体调试,确保门铃功能正常。

三、实训过程1. 硬件设计(1)根据设计要求,绘制电路原理图,并选用合适的元器件。

(2)使用Protel等软件绘制电路原理图,并生成PCB板。

(3)根据PCB板制作电路板,焊接元器件。

2. 软件设计(1)使用Keil uVision等软件编写C语言程序。

(2)编写程序,实现按键扫描、音乐播放、数码管显示等功能。

(3)调试程序,确保程序正常运行。

3. 系统调试(1)搭建电路,连接元器件,检查电路连接是否正确。

(2)将程序烧录到单片机中,进行调试。

(3)进行系统联调,确保门铃功能正常。

四、实训结果1. 成功设计并制作了一款基于单片机的电子门铃。

2. 熟练掌握了单片机编程、电路设计和调试方法。

3. 提高了实际动手能力和创新思维。

五、实训体会1. 通过本次实训,我对单片机原理、编程技术和电子电路设计有了更深入的了解。

2. 在实训过程中,我学会了如何根据设计要求进行硬件和软件设计,并掌握了调试方法。

3. 实训过程中遇到的问题让我学会了如何查阅资料、分析问题、解决问题,提高了我的实际操作能力。

基于单片机语音门铃设计毕业设计

基于单片机语音门铃设计毕业设计

基于单片机语音门铃设计毕业设计基于单片机的语音门铃设计毕业设计第一章绪论1.1音乐门铃、电子密码锁简介在现代电子产品中,由于电子音乐门铃具有悦耳动听,价格低廉,耗电少等优点,在现代家居中的应用越来越流行。

本毕业设计是基于单片机的“叮咚”门铃,通过单片机控制输出频率,由音频功率放大器LM386放大给扬声器,使之发出不再是单调的提示音,而是不同凡响的流行音乐旋律。

当有客人来访时,按一下按钮,门铃就会奏出优美的电子音乐。

而电子密码锁是一种有别于传统机械锁而且能通过密码的输入来控制电路或者是芯片工作,继而控制机械开关的闭合,从而完成开锁、闭锁任务的电子类产品。

它的类别众多,既有简单的电路产品,也有基于单片机芯片的产品。

现在应用比较广泛的电子密码锁是以控制芯片为核心,通过程序的编译来实现的。

它的性能和安全性远远的超过了机械锁。

其特点如下:(1)保密性好,编码量多,远远大于弹子锁,随机开锁成功率几乎为零。

(2)密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。

(3)误码输入保护,当输入密码多次错误时,报警系统自动启动。

(4)无活动零件,不会磨损,寿命长。

(5)使用灵活性好,不像机械锁必须佩带钥匙才能开锁。

(6)电子密码锁操作简单易行,一学即会。

因此把门铃与电子密码锁进一步结合起来,就出现了新一代多功能的语音门铃。

1.2语音门铃的发展趋势近几年来,随着市场上智能化楼房的不断升温,门铃系统已作为智能化的办公室与智能化的住宅小区的一个不可分割的组成部分,被各商家和用户所接受。

人们渐渐开始习惯利用门铃系统来代替传统的铁钥匙去管理各种通道门,就促使门铃系统得到了突破性的发展。

从以前的“叮咚”门铃,它价格便宜,性能可靠,耗电量少,安装也简便;然后就有了音乐门铃,按下再也不是“叮咚”声,而是悦耳的音乐,让客人可以耐心的等待;现在的门铃已经出现可视门铃,在屋里屋外都有可视机,并且可以对话,通过对话,主人可以在里屋按动旋纽开门,这样主人就不用亲自出来开门了,很方便。

编写报警声软件设计任务书

编写报警声软件设计任务书

编写报警声软件设计任务书任务一音乐门铃一、任务设计要求1、实现“滴、滴”报警声要求:产生频率为500Hz,扬声器响0.25s,停0.25s,反复循环2、实现“滴、滴”报警门铃要求:在1的基础上增加按钮动作。

按钮按下一次,“滴、滴”声持续约3秒。

3、技能提高任选一首歌曲,编制歌谱表,由单片机演奏,实现音乐门铃。

二、设计过程1、设计方案确定2、硬件电路设计3、软件设计实现“滴、滴”报警声步骤1:定时参数的计算1) 要产生频率为500Hz的方波信号,方波信号的周期为2ms 。

电路采用12MHz的晶振,利用定时器T0的方式1,产生1ms的定时,在P1.7上输出周期为2ms的方波。

(a) T0的方式控制字TMOD:(b) 计算计数初值X由于晶振为12MHz,机器周期T=s 1,要产生产生1ms的定时,计数初值为将分别预置给TH0、TL0。

(1)、绘制流程图(2)、编写源程序:共3个程序(1)#include<reg52.h>sbit OUT=P3^0;sbit OUT1=P3^1;main(){TMOD = 0x02;while(1){OUT=0;TH0=106;TL0=106;TR0=1;while(!TF0);TF0=0;OUT=1;TH0=(255-25)/256;TL0=(255-25)%256;TR0=1;while(!TF0);TF0=0;}}(2)#include<reg51.h>#define uint unsigned int#define uchar unsigned charuchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};void delays(uint t){uint i,j;for(i=t;i>0;i--)for(j=110;j>0;j--);}main(){uchar key,a,b;P2=0x00;while(1){ //置列为0,行为1,读行值 0000 1111P1=0x0f;a=P1;delays(10);//置行为0,列为1,读列值1111 0000P1=0xf0;b=P1;delays(10);key=a+b;if(key==0xee) //第0行P2=tab[0];if(key==0xde) //P2=tab[1];if(key==0xbe) //P2=tab[2];if(key==0x7e) //P2=tab[3];if(key==0xed) //第1行P2=tab[4];if(key==0xdd) //P2=tab[5];if(key==0xbd) //P2=tab[6];if(key==0x7d) //P2=tab[7];if(key==0xeb) //第2行P2=tab[8];if(key==0xdb) //P2=tab[9];if(key==0xbb) //P2=tab[10];if(key==0x7b) //P2=tab[11];if(key==0xe7) //第3行P2=tab[12];if(key==0xd7) //P2=tab[13];if(key==0xb7) //P2=tab[14];if(key==0x77) //P2=tab[15];}}(3)#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit Key = P1^0;sbit DoorBell = P1^7;uint p = 0 ;void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);void T0_time() interrupt 1 {DoorBell=~DoorBell;p++;if(p<400){TH0=(65536-750)/256;TL0=(65536-750)%256; }else if(p<800){TH0=(65536-1000)/256;TL0=(65536-1000)%256; }else{TR0=0;p=0;}}main(){IE=0x82;TMOD=0x01;TH0=(65536-750)/256;TL0=(65536-750)%256;while(1){if(Key==0){delayms(10);if(Key==0){while(!Key);TR0=1;}}}}4、软、硬件调试仿真(效果图)任务二简易演奏器一、任务设计要求1、基本要求利用定时器的定时功能,分别产生三个声音的方波,驱动扬声器发音,由三个按键控制演奏DO、RE、MI 三个声音。

基于单片机的电子音乐门铃

基于单片机的电子音乐门铃

控制电路学年设计任务书控制电路设计说明书学院名称:计算机与信息工程班级名称:2013级物联网工程1班学生姓名:高战学号:2013211641题目:基于单片机的电子音乐门铃指导教师姓名:董再秀起止日期:2015年7月9日-8月28日第一部分:正文部分一、选题背景随着时代的前进和发展,控制智能化、小型化、低功耗化得到广泛关注。

在这些领域中,单片机起到了举足轻重的作用,这就把单片机的应用提升到重要的地位,单片机应用系统设计就成为新的技术热点。

近几年来,随着市场上智能家居的不断升温,门铃系统已作为智能化办公室和智能化住宅小区的一个重要组成部分,被各商家和用户所接受。

人们已开始习惯用个性化的音乐门铃代替传统铁门铃,这使电子音乐门铃系统得到了飞跃性的发展。

随着单片机技术的飞速发展,通过单片机实现人们对物质生活的满足,这将会日益成为今后的一个重要发展的方向。

本设计是介绍了由AT89C51单片机来构成电子音乐门铃系统的工作过程,本系统主要完成该电子门铃不仅具有普通电子门铃的功能,而且还具有液晶显示屏提示功能。

单片机价格便宜,性能可靠,耗电量少,安装也简便,按下再也不是“叮咚”声,而是悦耳的音乐,让客人可以耐心的等待;它的工作状态能够由用户自行设定音乐和提示语,给来访者提供必要的音乐和文字回应信息,给人们生活提供很大的便利。

二、相关知识2.1 硬件部分2.1.1 AT89C51单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。

概括的讲:一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机是了解计算机原理与结构的最佳选择。

AT89C51是一个8位的微处理器,并包含有4KB的Flash存储器,即单片微机。

在很多的嵌入式控制系统中,许多具有高度灵活性及低成本的解决方案都由AT89C51为其提供。

#51单片机实现的音乐闹钟程序代码

#51单片机实现的音乐闹钟程序代码

功能描述:产品可以显示时间和日期,时间格式为 hh mm ss 日期格式为 yy.mm.dd时间和日期轮流显示。

时间显示5S 日期显示3S。

可以设置5个闹铃,闹铃音乐可以设置两种:毛驴和童年。

三个按键对时间和闹铃进行设置,六个LED进行显示。

计时采用DS1307。

继电时间不丢失,设置过的闹铃也不丢失。

闹铃音乐由单片机的两个定时器去产生频率实现。

部分程序如下://*************************************************//************************************************//***********************************************//程序名:DS1307 时钟程序//功能描述:用六个八段LED 轮流显示时间// 和日期。

有6个闹钟。

上电时从DS1307中读出// 当前时间、日期、闹钟。

//////////#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define LED P2#define LEDBit P0#define nop _nop_(>#define LightCount 40#define LightMax 80sbit SCL=P3^1。

sbit SDA=P3^0。

sbit ModeKey=P1^0。

sbit UpKey=P1^1。

sbit DownKey=P1^2。

sbit Speak=P3^6。

code ucharLCD_NUM[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}。

//0x25,//uchar Clock[]={0x88,0x88,0x88}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0
};
unsigned char code DaChangJin[]=
{
22,15,23,15,23,15,23,30,22,5,21,10,0xff,1,
16,15,21,15,21,15,21,30,0xff,1,0xff,1,
0
};
unsigned char code TWO_TIGER[]=
Delay(3000);
while(1)
{
PlayMusic(SOUND1_7);
PlayMusic(DI_DI_DI);
PlayMusic(DaChangJin);
PlayMusic(PHONE_RING);
{
11,10,12,10,13,10,14,10,15,10,16,10,17,10,21,10,0xff,1,0xff,1,0xff,1,0xff,1,
21,10,17,10,16,10,15,10,14,10,13,10,12,10,11,10,0xff,1,0xff,1,0xff,1,0xff,1,
Delay(20*(*MusicDataPtr));
MusicDataPtr++;
nosound();
Delay(24);
}
}
void Delay(unsigned int ms)
{
do
{
Delay1ms();
mcu@
2008.5.1
***************************************************************************/
/*******************************head files*********************************/
unsigned char code PHONE_RING[]=
{
27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,
0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,
}
/******************************main function*******************************/
void main()
{
SystemInit();
sound(1500);
Delay(1000);
nosound();
/***************************************************************************
音乐门铃 is from DOORBell4. Four musics are played sequently.A button could
be used to control the play procedure(not added yet).
0
};
/************************declaration for global variable*******************/
unsigned int FreqTiming,TimerCount=0;
unsigned char TH0Buff,TL0Buff;
} while(--ms);
}
void Delay1ms()
{
unsigned char i;
for(i=151;i;i--)
;
}
/********************************end of program****************************/
{
21,10,22,10,23,10,21,10,21,10,22,10,23,10,21,10,23,10,24,10,25,20,23,10,24,10,25,20,
0
};
unsigned char code Sakura[]=
{
16,10,17,10,21,10,17,10,16,10,17,5,16,5,14,20,13,10,11,5,12,5,13,10,14,10,13,10,13,5,11,5,7,20,
/************************* interrupt service routines**********************/
void T0ISR(void) interrupt 1
{
TH0=TH0Buff;
TL0=TL0Buff;
BUZZ=~BUZZ;
0
};
unsigned char code DOOR_BELL[]=
{
27,20,25,20,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,
27,20,25,20,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,
}
void nosound()
{
TR0=0;
BUZZ=1; //buzzer powerlayMusic(unsigned char *MusicDataPtr)
{
LED=0;
while(1)
{
PlayMusic(TWO_TIGER);
PlayMusic(Sakura);
PlayMusic(DOOR_BELL);
}
}
/********************************sub-functions*****************************/
void SystemInit()
{
TMOD=0x01;
ET0=1; //enable T0 interrupt
EA=1;
}
void sound(unsigned int frequency)
{
FreqTiming=460800/frequency; //e.g for 1Khz,FreqTiming=20,
21,10,22,10,23,10,24,10,25,10,26,10,27,10,31,10,0xff,1,0xff,1,0xff,1,0xff,1,
31,10,27,10,26,10,25,10,24,10,23,10,22,10,21,10,0xff,1,0xff,1,0xff,1,0xff,1,
TH0Buff=(65536-FreqTiming)>>8;
TL0Buff=(65536-FreqTiming)&0xff;
TH0=TH0Buff;
TL0=TL0Buff;
TR0=1; //Buzzer will be toggled each 500us
case 0xee: nosound(); MusicDataPtr++; break;
default: sound(SoundFreqTable[*MusicDataPtr]);MusicDataPtr++;break;
}
27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,
0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,0xff,1,
0
};
unsigned char code SOUND1_7[]=
0, 262, 294, 330, 349, 392, 440, 494,0,0,
0, 523, 587, 659, 698, 784, 880, 988,0,0,
0,1047,1175,1319,1397,1568,1760,1976,0,0,
0,2094,2350
};
switch(*MusicDataPtr)
{
case 0: nosound(); LED=1;return;
case 0xff: nosound(); Delay(200); MusicDataPtr++; break;
#include <REG51.h>
/********************definition for symbolic constants or pins*************/
sbit BUZZ=P1^2;
sbit LED=P1^0;
/************************declaration for function prototype****************/
void SystemInit();
void sound(unsigned int frequency);
void nosound();
void PlayMusic(unsigned char* MusicDataPtr);
void Delay(unsigned int ms);
void Delay1ms();
0
};
unsigned char code DI_DI_DI[]=
{
27,1,0xee,1,27,1,0xee,1,27,1,0xee,1,27,1,0xee,1,0xff,1,0xff,1,
相关文档
最新文档