简易电子琴的设计与实现及简易计算器-单片机课程设计_第1页
简易电子琴的设计与实现及简易计算器-单片机课程设计_第2页
简易电子琴的设计与实现及简易计算器-单片机课程设计_第3页
简易电子琴的设计与实现及简易计算器-单片机课程设计_第4页
简易电子琴的设计与实现及简易计算器-单片机课程设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE 单片机课程设计题目:实现简易电子琴院(系):专业:班级:学生:学号:指导教师:20XX年6月26日简易电子琴的设计与实现摘要:本次设计是利用单片机设计简易电子琴。其主要功能为:按下不同按键,发出不同1、2、3、4、5、6、7七个音符并且用LED或LCD显示当前按键。选用stm32f103VE,它有8个定时器,部分定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。利用芯片内部相关定时器来输出PWM,从而来驱动蜂鸣器。通过读取外部按键输入的值来相应改变定时器相关寄存器的值,从而来改变PWM的输出频率来达到发出不同音调。关键词:STM32f103VE;蜂鸣器;定时器

TheDesignoftheKeyboardAbstract:Thisdesignistheprofessionaldirectionofbiomedicalengineeringdesign.UsingSingleChipMicrocomputertoachieveasimpleKeyboard.Itsmainfunctionis:Whileauserpressthedifferentkeys,itwillmakedifferentsoundsfromthebuzzeranddisplaydifferentnumberswhichcorrespondedtothesounds.Usingstm32f103--C8T6ascontrolchip.Ithas16-bittimers.Someofthemwithupto4IC/OC/PWMorpulsecounter.MakinguseoftheTimerstogeneratedrivingsignal.Byreadingthestateoftheexternalkeytochangethefrequencyofoutput.DifferentfrequencyofthePWMwillcontrolbuzzermakesdifferentsounds.Keywords:STM32f103;signal;Timer

一、设计目的:通过本次综合设计,旨在运用已经学过的知识,根据题目的要求进行软硬件系统的设计和调试,对在《单片机的原理及应用》课程中涉及的芯片结构、控制原理、硬件和编程等方面有一定的感性认识和实践操作能力。从而加深对本课程知识点的理解,对于设计能力,调试能力,以及分析处理问题的能力得到了一定的提高。其目的是让学生得到一次进行独立设计的工程实践锻炼,不仅培养严谨的科学态度和扎实的实践技能、良好的工程意识,并在设计中学会如何发现、分析和解决工程实践问题的技能和方法,将所学知识综合应用于工程实践中,为后续的毕业设计做好准备。二、控制要求:利用stm32系列单片机设计简易电子琴。功能要求:(1)按下不同按键,发出不同1、2、3、4、5、6、7七个音符;(2)用LED或LCD显示当前按键三设计原理:单片机可以驱动蜂鸣器或其他扬声器发出声音,可以控制其发出不同的声调,从而连接起来构成一个曲子。一般来说,单片机不像其他专业乐器能奏出各种音色的声音,单片机的音乐基本上都是单色频率。1)音调:在音乐中把C上方的A音定为标准音高,其频率为f=440Hz,其余音均与之比较。音符do与音符i之间正好相差一个倍频程,即相差一个八度音。在一个八度音中,有12个半音。只要知道了这12个音符的音高,就可以根据音符之间的倍频程关系得到其他音符基本的音调频率。知道了一个音符的频率之后,编可以让单片机发出相应的频率的振荡信号,从而产生相应的音符声音,常采用的方法是通过单片机的定时器进行定时中断,在中断服务子程序中,将单片机上外界扬声器的I/O口来回置高电平或低电平,从而让扬声器发出声音。为了让单片机发出不同频率的音符的声音,只需将定时器预置不同的定时值来实现。以标准音高A为例,标准音高的A的频率f=440Hz,其对应周期为T=1/f=2272μs,单片机上定时器的中断触发时间为t=T/2=1136μs,如果单片机外接12MHz的晶振,则F0=12MHz,则标准音高A在单片机定时器工作方式1下定时器高低计数器的初值为:TH=FBH,TL=90H.2)节拍:如果规定一拍的时长为400ms,那么以四分音符为节拍时,四分音符的时长为400ms,八分音符的时长为200ms,十六分音符的时长为100ms.从而在单片机上可以采用循环延时的方法来实现控制一个音符唱多长时间。首先要编写一个精确的基本时长的延时程序,如果以八分音符的时长为基本延时时间,那么对于一个音符,如果它是四分音符,只需调用四次延时程序,如果它是二分音符,则需要调用八次延时程序。以此类推。3)演奏音乐的方法:Step1:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍数;Step2:将这些参数做成数据表格,存放在存储器中;Step3:通过按键调用程序去取出一个音符的相关参数,播放该音符;Step4:播放完该音符后,等待下一次按键调用程序去取出下一次音符的相关参数,再播放音符;Step5:对于演奏音乐,一般将休止符的音调参数设置为FFH,节拍参数设置为00H.蜂鸣器驱动电路此次设计选用有源蜂鸣器。有源蜂鸣器的发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发音,因此需要一定的电流才能驱动它。单片机的I/O引脚的输出电流比较小输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,如图4-4所示,选用NPN的三极管来达到电流放大的作用。图1-1蜂鸣器驱动电路按键电路:按键都采用了上拉电阻,当按键处于不被按下的状态时,连接到单片机的一端的输入信号为高电平,当按键按下时,输入为低电平,如图4-6所示。图1-2按键电路四设计任务和主要内容:主要内容:利用实验资源实现简易电子琴的简单功能:(1)利用蜂鸣器发出不通的声音 (2)使用lcd显示器来显示音阶输入的相关信息 (3)当按下键盘相对按键,蜂鸣器会发出相对音阶的单音,共有 两个8度音阶(4)至少可以输入16个单音,可以一起演奏出来(5)演奏时可以按键中断(6)按下音乐播放键可以自动播放预先存在内存中的曲子主要技术指标和要求: (1)充分应用已给出的开发板硬件的资源进行设计 (2)通过改变占空比产生不同频率的信号 (3)实现按键发出的相对音阶的单音 (4)可以按照已经编好的乐谱演奏出相应的音乐五单片机控制系统原理:本次课程设计采用atmel公司stm32f103VE单片机,stm32f103VE是低电压,高性能的cmos8位单片机,片内含8KB的程序存储器和12B的随机存取数据存储器,其主要功能特性为:兼容MCS51指令系统·32个双向I/O口·3个16位可编程定时/计数器中断·2个串行中断·2个外部中断源·2个读写中断口线·3级加密位·低功耗空闲和耗电模式·软件设置睡眠和唤醒功能等.单片机必须在时钟的驱动下才能工作,在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。单片机的定时控制功能是用时钟电路和振荡器完成的,而根据硬件电路的不同,连接方式分为内部时钟方式和外部时钟方式。本次设计中采用内部时钟方式。在按键中常产生‘毛刺’现象,要消除“毛刺”现象,最常用的方法是即时重复扫描法,延时法的原理是:‘毛刺’脉冲一般持续时间短,约为几毫秒,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后,再延时一段时间(十毫秒到二十毫秒)后再进行判断此电平是否保持原来的状态,如果是,则说明是有效的按键按下,否则为无效按键。矩阵键盘是单片中外部设备中所使用的排列类似于矩阵的键盘组。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。行扫描法:1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。六主程序:主程序的流程图:开始按键是否按下NY去抖动,延时10msN按键是否按下Y扫描按键位置做一次按键处理,播放 相应的音符或音乐七、结束语:通过本次课程设计,我不仅学会了对KEIL的应用,还加深了对STM32单片机的了解,同时也进一步增强了自己的动手能力。通过本次设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。这个设计过程中,通过在原有的按键中断的基础上进行了改进,使之具备了电子琴的基本功能。设计结果能够符合题意,成功完成了此次实习要求,我不只在乎这一结果,更加在乎的,是这个过程。这个过程中,自己更加注重了一些基础的理知识的学习,很好的把平时课堂上的知识运用到了实际的操作中。同时,软硬件的结合调试也让自己明白了理论上的很多东西也是需要实际实验的验证的。本综合设计是让得到一次进行独立设计的工程实践锻炼,不仅培养严谨的科学态度和扎实的实践技能、良好的工程意识,并在设计中学会如何发现、分析和解决工程实践问题的技能和方法,为后续的毕业设计做好准备。同时在这里也感谢在整个设计中帮助过我的老师和同学们。八、参考文献[1]冯建华,赵亮.单片机应用系统设计与产品开发[M].北京:人民邮电出版社2004[2]谭浩强.C语言程序设计[M].北京:清华大学出版社1999[3]《单片机与嵌入式:STM32库开发实战指南》[M]北京:机械工业出版社2013附件:Main.c#include"stm32f10x.h"#include"KEY.h"#include"Beep.h"#include"PWM_OutPut.h"//intmain(void)//{//uint8_tK;////SysTick_Init();//KeyBoard_Init();//TIM4_GPIO_Config();////Beep_GPIO_Config();////TIM4_PWM_Init();////Beep_do();//while(1)//{////TIM4->CCR3=523;////Delay_us(400);////TIM4->CCR3=578;////Delay_us(400);////TIM4->CCR3=659;////Delay_us(400);////TIM4->CCR3=698;////Delay_us(400);////TIM4->CCR3=784;////Delay_us(400);////TIM4->CCR3=880;////Delay_us(400);////TIM4->CCR3=988;////Delay_us(400);////K=Read_KeyValue();//switch(K)//{//case1://TIM4->CCR3=256;//TIM4_Mode_Config(280);////TIM_Cmd(TIM4,ENABLE);//break;//case2://TIM4->CCR3=288;//TIM4_Mode_Config(10);//TIM_Cmd(TIM4,ENABLE);//Delay_us(10);//TIM_Cmd(TIM4,DISABLE);//break;//case3://TIM4->CCR3=320;////TIM_Cmd(TIM4,ENABLE);//break;//case4://TIM4->CCR3=341;////TIM_Cmd(TIM4,ENABLE);//break;//case5://TIM4->CCR3=384;////TIM_Cmd(TIM4,ENABLE);//break;//case6://TIM4->CCR3=426;////TIM_Cmd(TIM4,ENABLE);//break;//case7://TIM4->CCR3=480;////TIM_Cmd(TIM4,ENABLE);//break;//case8://TIM4->CCR3=512;////TIM_Cmd(TIM4,ENABLE);//break;//}////if(K==0)////{////TIM4->CCR3=0;////}//}////addyourcodehere//}intmain(void){TIM_SetAutoreload(TIM2,1); TIM4_GPIO_Config(); NVIC_Configuration();TIM4_Mode_Config();KeyBoard_Init(); while(1) {//// TIM_SetAutoreload(TIM2,7);// if(keyvalue()==0)// {TIM_SetAutoreload(TIM2,0);}// if(keyvalue()==1)// {TIM_SetAutoreload(TIM2,120);}// elseif(keyvalue()==2)// {TIM_SetAutoreload(TIM2,110);}// elseif(keyvalue()==3)// {TIM_SetAutoreload(TIM2,100);}// elseif(keyvalue()==4)// {TIM_SetAutoreload(TIM2,90);}// elseif(keyvalue()==5)// {TIM_SetAutoreload(TIM2,80);}// elseif(keyvalue()==6)// {TIM_SetAutoreload(TIM2,70);}// elseif(keyvalue()==7)// {TIM_SetAutoreload(TIM2,60);}switch(Read_KeyValue()) { case(0):TIM_SetAutoreload(TIM4,0); break; case(1):TIM_SetAutoreload(TIM4,3800); break; case(2):TIM_SetAutoreload(TIM4,3450); break; case(3):TIM_SetAutoreload(TIM4,3100); break; case(4):TIM_SetAutoreload(TIM4,2750); break; case(5):TIM_SetAutoreload(TIM4,2400); break; case(6):TIM_SetAutoreload(TIM4,2050); break;case(7):TIM_SetAutoreload(TIM4,1700); break; case(8):TIM_SetAutoreload(TIM4,1350); break; case(9):TIM_SetAutoreload(TIM4,1250); break; case(10):TIM_SetAutoreload(TIM4,1150); break; case(11):TIM_SetAutoreload(TIM4,1050); break; case(12):TIM_SetAutoreload(TIM4,950); break; case(13):TIM_SetAutoreload(TIM4,850); break; case(14):TIM_SetAutoreload(TIM4,750); break;case(15):TIM_SetAutoreload(TIM4,650); break; case(16):TIM_SetAutoreload(TIM4,550); break; } } }SysTick.c#include"SysTick.h"static__IOu32TimingDelay;voidSysTick_Init(void){ if(SysTick_Config(SystemCoreClock/1000)) { while(1); } SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;}voidDelay_us(__IOu32nTime){TimingDelay=nTime; SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; while(TimingDelay!=0);}voidTimingDelay_Decrement(void){ if(TimingDelay!=0x00) { TimingDelay--; }}PWM.c#include"PWM_OutPut.h"//staticvoidTIM4_GPIO_Config(void)voidTIM4_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_8);}voidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}//staticuint16_tTIM4_Mode_Config(uint16_ta)voidTIM4_Mode_Config(void){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_OCInitTypeDefTIM_OCInitStructure;TIM_TimeBaseStructure.TIM_Period=1;TIM_TimeBaseStructure.TIM_Prescaler=36-1;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;/TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=0;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OC3Init(TIM4,&TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM4,ENABLE);TIM_Cmd(TIM4,ENABLE);//Delay_us(10);//TIM_Cmd(TIM4,DISABLE);}//voidTIM4_PWM_Init(void)//{//TIM4_GPIO_Config();//TIM4_Mode_Config();//}信息与电气工程学院课程设计说明书课程名称:单片机应用课程设计题目:简易计算器专业班级:学生姓名:学号:21指导教师:设计周数:二周设计成绩:目录1、课程设计目的2、课程设计任务2.1设计题目2.2设计小组成员2.3原始数据及主要任务2.4技术要求3、课程设计内容3.1方案设计3.1.1单元电路设计3.2.13.2.23.2.33.2.4系统调试3.4系统设计3.5程序流程图3.6系统实施1、课程设计目的1.1用单片机课程及已学电子电路知识设计一简易时钟显示装置,包括电路图的设计和制版等。1.2通过课程设计加深对单片机课程的相关知识的学习和理解。1.3初步学会一些设计思想和实践技能。提高学生综合素质。1.4让学生从设计过程中领悟到相互合作的重要性。2、课程设计任务2.1设计题目:简易数字计算器设计2.2设计小组成员:魏昌磊,张锦超,常源月,吴坤书2.3原始数据及任务设计并制作出一个以单片为核心的电子锁系统:1、确定总体设计方案;2、设计键盘输入电路;3、设计显示电路;4、合理分配地址,编写系统程序;5、利用protel设计硬件电路原理图和PCB图;6、软硬件联机调试2.4技术要求设计一个以MCS-51单片机为核心的简易计算器系统。能够进行两位数的简单的加、减、乘、除运算,且具备清零功能。十个数字键,六个功能键。进行除法运算时,小数点保留2位显示。如果除数为零,择清零显示,蜂鸣器响,当按下任意键后,蜂鸣器停止。课扩展计算连续功能,数据溢出清0显示,蜂鸣器响,按下任意键后,蜂鸣停止。3、课程设计内容3.1方案设计3.1.1STC90C52AD是由宏晶公司生产的高性能八位单片机。如图一所示。该芯片采用FLASH存储技术,内部具有8KB字节快闪存存储器,采用DIP封装,是目前在中小系统中应用最为普及的单片机。STC90C52AD可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。只要程序长度小于8K,四个I/O口全部提供给用户。可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,与8751/87C51的12V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,图一适合许多嵌入式控制领域。工作电压范围(2.7V~6V),全静态工作,工作频率宽在0Hz~24MHz之间,比8751/87C51等51系列的6MHz~12MHz更具有灵活性,系统能快能慢。STC90C52AD芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。STC90C52AD单片机为40引脚芯片如图一所示,在本设计中,主要用到P0口、P2口、P1.0口及P3.0、P3.1、P3.2口。P0口可作为通用I/O口,但须外接上拉电阻,所以在设计显示数码管我们避免了使用P0口这样大大简化了动态显示电路。P1口:8位、双向I/0口,内部含有上拉电阻。P1口可作普通I/O口。输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。在FLASH并行编程和校验时,P1口可输入低字节地址。在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。P2口:具有内部上拉电阻的8位双向I/O口。P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外部输出电流。在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。P3口:具有内部上拉电阻的8位双向口。P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。若外部的负载是低电平,则通过内部上拉电阻向输出电流。在本设计中,P3口作为时间设置的4按键输入,因为有上拉电阻,所以可以通过按键直接接地,简化了电路。在与FLASH并行编程和校验时,P3口可输入某些控制信号。P3口除了通用I/O口功能外,还有替代功能如表1所示。表1P3口的第二功能端口引脚各个功能P3.0RXD(串行口输入端)P3.1TXD(串行口输出端)P3.2INT0(外部中断0请求输入端,低电平有效)P3.3INT1(外部中断1请求输入端,低电平有效)P3.4T0(定时/计数器0计数脉冲输入端)P3.5T1(定时/计数器1计数脉冲输入端)P3.6WR(外部数据存储器写选通信号输出端,低电平有效)P3.7RD(外部数据存储器读选通信号输出端,低电平有效)单片机使用宏晶公司支持串口下载程序(ISP)的单片机,为STC90C52AD课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图见下图。该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图见下图。扩展电路在万用板上制作用四位数码管显示小时与分钟,中间那个点用来区分小时与分钟;每秒用一个LED闪烁一下;用了4个按键,一个是选择键,一个是加键,一个是减键,一个是确认键。时间要精确,整点报时,声音间隔1秒,并且可以调整时间调整位闪烁提示。扩展电路用到得器件:共十六个按键:十个数字键,一个是加键,一个是减键,一个是除键,一个乘键,一个等键,一个清零键;六个DPY7-SEGDP共阳极动态LED;六个PNP三极管;十四个330欧姆和两个470欧的电阻;导线。每各引脚可吸收8各TTL的灌电流。作为输入时,首先应将引脚置1。P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。在该模式下,P0口含有内部上拉电阻。在FLASH编程时,P0口接收代码字节数据;在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。标识符器件名称规格型号数量标识符器件名称规格型号数量U1单片机STC90C52AD1C11C12瓷片电容22p或30p2U2RS232驱动MAX2321C13-C17独石电容0.22uF(224)5J1-J4,CRY

LstsHsts接线插孔座排母86针C1C2电解电容1.0uF/50V2C3C4C电解电容10uF/50V3CRY晶体谐振器6MHz1C5-C8电解电容47uF(22uF)4High,Low,PS发光二极管φ33JPS接线端子电源用1R1金属膜电阻200Ω1RST按钮小(0.2×0.3)1R0金属膜电阻6.8K1JDBDB9插座DB9针形座1R2R3R4金属膜电阻3.3K3U1DIP插座DIP401R9金属膜电阻1M1U2DIP插座DIP1613.1.2蜂鸣器二极管报警电路蜂鸣器二极管报警电路1时钟电路STC90C52AD单片机4x4功能键盘电路动态显示电路动态显示控制电路采用单片机的TO定时器,使其工作在方式1,产生一个100ms定时中断,循环10次,到1s时,秒加1;秒到60时,分加1,秒清零;分到60时,秒清零,分清零。数码管采用动态显示,一个扫描周期共循环四次,依次显示秒的低位、秒的高位、分的低位、分的高位,每次显示延时4ms。这期间要将不同的数送到P1口,以及将P2口的不同位置1。调节时,调用相应的子程序,来完成功能。3.2单元电路设计3.2.1数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,如图三所示。图二3.2.52单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。

在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。内部振荡方式的外部电路如下图所示。图三

图中,电容器Col,C02起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。晶振频率的典型值为12MH2,采用6MHz的情况也比较多。内部振荡方式所得的时钟情号比较稳定,实用电路中使用较多。外部振荡方式是把外部已有的时钟信号引入单片机内。这种方式适宜用来使单片机的时钟与外部信号保持同步。3.2.3蜂鸣器电路单元如图四所示图四3.2.4如图五所示另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个图五数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms。3.2.5如图六所示功能分配如图七所示图六图七3.3系统调试硬件调试时可先检查印制板及焊接的质量情况,在检查无误后可通电检查LED显示器的点亮状况。若亮度不理想,可以调整P1口的电阻大小,一般情况下取200Ω电阻即可获得满意的亮度效果。实验室制作时,可结合示波器测试晶振及P1,P2端口的波形情况进行综合硬件测试分析。硬件调试:硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。硬件调试可分为静态调试与动态调试两步进行。静态调试:是在用户系统未工作时的一种硬件检测。第一步:目测。检查外部的各种元件或者是电路是否有断点。第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。第三步:加电检测。给板加电,检测所有插座或是器件的电源端是否符合要求的值第四步:联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。动态调试:是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。软件调试:软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。可以利用仿真器加以调试,对系统单个单元进行调试,当单元电路成功后,在对整个程序调试,最后在用CPU芯片调试。3.4系统设计要用到实现要求的功能,需要16个键,09,+,-,*,/,清零键考虑到要有两位小数显示,至少需要4个七段数码管,但设计时应用了六个数码管,倒数第二位小数点直接接地,一直显示小数点亮。3.5程序流程图如图3.6系统实施根据原理图列写原件清单,领取所需的元件,板子和工具(烙铁,钳子,万用表,螺丝刀,剪刀),去试验台焊电路板。焊完板子,通过软硬结合的方式对电路板进行硬件调试,硬件没错误之后,开始进行软件编程,直到整个功能实现,并进行优化。4.总结通过这两周的课程设计,让我了解了设计电路的程序,也让我了解了数字钟的工作原理和设计理念,加强了我们动手、思考和解决问题的能力。在此次的数字钟设计过程中,我进一步熟悉了单片机芯片的硬件结构和各引脚的功能,以及其他芯片如CD4511、数码管的工作原理和使用方法,巩固和加强了理论知识。这次课程设计给我的最大感受就是仅仅学理论知识是不够的,必须将理论知识和实践结合起来,在实践中应用理论知识,从而使其得到更深刻的理解和巩固,来提高自己的实际运用能力和独立思考的能力。在设计的过程中遇到了重重困难,不过经过老师的耐心指导和同学的帮助,很多问题都解决了。最困难的就是调试调试程序,刚开始程序总是不能满足要求,不过经过多次更改,最后终于成功了。不过在硬件上,数码管显示不是令人很满意,可能是焊接的原因,多次查找也没能解决,这方面还需要多多练习。设计是一个团队的任务,我们在一起工作很愉快,互相帮助,互相学习。我感觉我和同学们的关系更近了。团结协作是成功的一项非常重要的保证,而这次课程设计也正好锻炼了这一点,这也是非常宝贵的。设计中的很多问题都是老师在老师辛勤、耐心的指导下完成的,同时,我们也从老师身上学到了很多知识,在此表示感谢!C语言程序://51单片机4*4键盘简单计算器程序#include<reg52.h>unsignedcharcodetab[16]={0xfd,0xb7,0x0d,0x25,0xb1, 0x61,0x40,0x37,0x00,0x20, 0xa0,0x83,0xa7,0xa1,0x84, 0x8e};//段选码表unsignedintvalue1,value2,result;intkeyt,key1,tempkey,s;sbitP0.0=P1^0;sbitP0.1=P1^1;sbitP0.2=P1^2;sbitP0.3=P1^3;voiddelay(unsignedintz)//延时函数{ unsignedintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}intgetkey()//扫描键盘并获得键值{intkey=0; P2=0xff; if(P2!=0xff) delay(5); while(P2!=0xff) //行扫描有低电平信号出现 { switch(P2) //则在P2口全输出高电平的情况下进行列扫描 { case0xfe:key=7;break; //得出键值 case0xfd:key=8;break; case0xfb:key=9;break; case0xf7:key=14;break; } } if(key)return(key); P2=0xff; while(P2!=0xff) { switch(P2) { case0xfe:key=4;break; case0xfd:key=5;break; case0xfb:key=6;break; case0xf7:key=13;break;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论