毕业论文_基于串口通信的校园点歌课程设计.doc_第1页
毕业论文_基于串口通信的校园点歌课程设计.doc_第2页
毕业论文_基于串口通信的校园点歌课程设计.doc_第3页
毕业论文_基于串口通信的校园点歌课程设计.doc_第4页
毕业论文_基于串口通信的校园点歌课程设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

永州职业技术学院电子技术系(20 10 级)专科生课程设计(论文)基于串口通信的校园点歌系统专 业:应用电子技术 课程名称单片机原现及应用 学 生 姓 名: 班 级:2010电子 学号 指导教师姓名: 职称 副教授 职称 副教授 最终评定成绩 2012 年 12 月 30主要符号表摘 要近些年来,单片机系统在工业领域中逐步得到广泛应用,特别是利用单片机能直接进行双工通信的特点,在数据采集,数据处理等控制中已成为一种发展方向。单片机与pc机串行通信的方式并行通信和串行通信,其中串行通信的特点是按顺序地传输数据,只需一对传输线就可以实现通信,从而降低了通信成本。本次程序设计以st89c52单片机为核心器件,目 录第1章 vb11.1 vb 界面设计与制作41.2 vb 界面用到的控件介绍4第 2 章 单片机2.1 1602显示器的调试原理10 2.2 89c52rc单片机的介绍12 调试过程与方法13结论14参考文献1致谢1附件115附件227第1章 vb1.1 vb 界面设计与制作1.1.1 vb 界面 如下图1.1.2 用到的控件及其作用 ( 1 ) textbox 控件 功能:设置控件中显示的文本值 ( 2 ) combobox控件 ( 3 ) filebox,drive,listbox 控件 ( 4 ) timer ( 5 ) windowsmediaplayer ( 6 ) mscomm ( 7 ) label ( 8 ) command( 9 )check1.2 vb 界面用到的控件介绍( 1 )textbox 本框控件显示用户可以编辑的文本。文本框控件是个微型文字编辑器,其最重要的属性是text属性,可以设置控件上的文本或者读取用户输入的文本。常用属性:(1)text:文本框中包含的文本内容。(2)multiline:该属性值为true时可以接收多行文本,可输入的内容多达32kb。缺省时,文本框只能单行输入,最多2048个字符。(3)scrollbars:0没有滚动条,1水平滚动条,2垂直滚动条,3同时具有水平及垂直滚动条。(4)passwordchar: 指定显示在文本框中的替代符,如一串“*”号等,主要用于口令的输入。我们经常在程序操作中遇到要填写密码的部分,为了保密起见,在屏幕上显示的字符一般 “*”表示,并且这时是无法用剪贴板的,这在vb中非常容易做到,把passwordchar中设一个用来代替字符串的字符即可,并不一定是“*”。(5)maxlength:指定显示在文本框中的字符数,超出部分不接收,并同时发出“嘟嘟”声。(6)locked:决定控件是否可编辑。注意:如果multiline属性被设为true,那么passwordchar属性将不起作用。(7)selstart,sellength,seltext属性:selstart属性:文本框中文本的选定点位置(从起始位置为0开始算,一个汉字也认为占1个位置)。sellength属性:文本框中选中文本的长度;seltext属性:选中的文本字符串。 ( 2 ) combobox 组合框(combobox)控件,是列表框和文本框组成的控件,具有列表框和文本框的功能。并具有文本框和列表框的大部分属性。它可以像列表框一样,让用户通过鼠标选择需要的项目,也可以像文本框那样,用键入的方法选择项目。组合框的基本属性:name、height、width、top、l,eft、enabled、visible和index等。组合框与列表框具有相同的属性:list、listindex、listcount、selected、sorted、 text、multiselect,style等。组合框的特有属性:组合框有3种不同的样式,其下拉式组合框、简单组合框可输入内容,但必须通过additem方法加入。组合框的风格是由style属性值决定的。设置组合框的style属性可以选用组合框的3种样style属性为0时,是下拉式组合框,默认状态;style属性为1时,是简单组合框;style属性为2时,是下拉列表框。1)下拉组合框 下拉组合框,显示在屏幕上的仅是文本编辑器和一个下拉箭头。执行时,用户可像在文本框中一样直接输入文本,也可单击组合框右侧的下拉箭头,打开列表项供 用户选择。选定某个选项后,此选项将被显示在组合框顶端的文本框中。这种组合框允许用户输入不属于列表内的选项。当用户再用鼠标单击下拉箭头时,下拉出来 的列表项就会消失,仅显示文本框,这种风格能节省窗体上的空间,因为列表部分在用户选择一个项时将关闭。2)简单组合框简单组合框,列出所有的项目供用户选择,右边没有下拉箭头,列表框不能收起和下拉。与文本编辑器一起显示在、屏幕上。用户可在文本框中直接输入列表项中没有的选项,也可从列表中选择。3)下拉式列表框下拉式列表框与下拉组合框相似,区别是用户不能输入列表框中没有的项,只能在列表中选择。组合框拥有列表框和文本框的大部分属性。组合框也有seli,ength、selstart和seltext这3个文本框才有的属性。还有locked属性和change事件等。常用事件组合框响应的事件依赖于其style属性。(1)简单组合框(style属性值为1),才有接收dblclick事件。(2)下拉组合框(style属性值为0)与下拉列表框(style属性值为2),可接收click事件和dropdown事件。(3)下拉组合框和简单组合框,可以在文本区输入文本,当输入文本时,可以接收change事件。(4)当用户单击组合框中向下的箭头时,将触发dropdown事件,该事件实际上对应向下箭头的单击click事件。在一般情况下,用户选择项目之后,只需要读取组合框的。text属性(3)filebox,drive,listbox 控件许多应用程序必须显示关于磁盘驱动器、目录和文件的信息。为使用户能够利用文件系统,visual basic 提供了两种选择。可以使用由 commondialog控件提供的标准对话框,或者使用 dirlistbox、drivelistbox 和 filelistbox这三种特殊的控件的组合创建自定义对话。文件系统控件使用户能在应用程序中检查可用的磁盘文件并从中选择。若只需要标准的“打开文件”或“保存”对话框,则应考虑使用 commondialog控件。详细信息 请参阅本章前面的“使用 commondialog 控件”。示例应用程序:winseek.vbp许多代码示例都来自 winseek 示例应用程序(winseek.vbp),该程序列在samples目录中。检查文件系统每个文件系统控件都经过精心设计,将灵活、复杂的文件系统检查功能与简易的编程方法结合起来。每个控件都自动执行文件数据获取任务,但也可编写代码自定义控件外观并指定显示的信息。( 4 ) timer通过引发 timer 事件,timer 控件可以有规律地隔一段时间执行一次代码。 语法 timer 说明 timer 控件用于背景进程中,它是不可见的 *以下是他的属性* enabled 属性 返回或设置一个值,该值用来确定一个窗体或控件是否能够对用户产生的事件作出反应。 语法 object.enabled = boolean enabled 属性的语法包含下面部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的一个对象。如果 object 被省略,则与活动窗体模块相联系的窗体被认为是 object。 boolean 一个用来指定 object 是否能够对用户产生的事件作出反应的布尔表达式。 设置 boolean 的设置为: 设置 描述 true (缺省)允许 object 对事件作出反应。 false 阻止 object 对事件作出反应。 enabled 属性示例 该例子使一个 commandbutton 控件有效而不管 textbox 控件是否包含文本。要试用此例,先将下面的代码粘贴到带有 commandbutton 和 textbox 控件的一个窗体的声明部分,然后按下 f5 键并在文本框中随意输入一些内容。 private sub form_load () text1.text = 清除文本框的内容。 command1.caption = save 在按钮上放置标题。 end sub private sub text1_change () if text1.text = then 查看文本框是否为空。 command1.enabled = false 使按钮无效。 else command1.enabled = true 使按钮有效。 end if end sub interval 属性 返回或设置对 timer 控件的计时事件各调用间的毫秒数。 语法 object.interval = milliseconds interval 属性语法有以下组成部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的一个对象。 milliseconds 数值表达式,指定毫秒数,“设置值”中有详细说明,。 设置值 milliseconds 的设置值为: 设置值 描述 0 (缺省值)使 timer 控件无效。 1 to 65,535 设置的时间间隔(以毫秒计),在 timer 控件 enabled 属性设置为 true 时开始有效,例如,10,000 毫秒等于 10 秒。最大值为 65,535 毫秒,等于 1 分钟多一些。 说明 可以在设计时或在运行时设置 timer 控件的 interval 属性。使用 interval 属性时,请记住: timer 控件的 enabled 属性决定该控件是否对时间的推移做响应。将enabled 设置为 false 会关闭 timer 控件,设置为 true 则打开它。当 timer 控件置为有效时,倒计时总是从其 interval 属性的设置值开始。 创建 timer 事件程序用以告诉 visual basic 在每次 interval 到时该做什么。 interval 属性示例 这个例子可以调整窗体切换颜色的速度。要尝试这个例子,请将代码粘贴到包含 timer 控件、hscrollbar 控件(水平滚动条)和 picturebox 控件的窗体的声明部分,然后按 f5 键并单击滚动条。 private sub form_load () timer1.interval = 900 设置时间间隔。 hscroll1.min = 100 设置最小值。 hscroll1.max = 900 设置最大值。 end sub private sub hscroll1_change () 根据滚动条的数值设置时间间隔。 timer1.interval = 1000 - hscroll1.value end sub private sub timer1_timer () 在红色和蓝色之间切换背景色。 if picture1.backcolor = rgb(255, 0, 0) then picture1.backcolor = rgb(0, 0, 255) else picture1.backcolor = rgb(255, 0, 0) end if end sub 剩下的就不一一介绍了这些在vb中算是比较基本的控件使用。只要不会只要你能想的就能够实现! 第 2 章 单片机 2.1 1602显示器的调试原理 /1602写入程序 void write_com(unsigned char com ) rs=0; delay(5); lcden=1; delay(10); p0=com; delay(5); lcden=0; delay(5); void write_data(unsigned char dat,unsigned char add) write_com(0x80+add); rs=1; delay(5); lcden=1; p0=dat; delay(5); lcden=0; delay(5);/ 1602初始化程序void init() rw=0; lcden=0; dula=0; wela=0; scon=0x50; ea=1; es=1; ps=1; et0=1; /定时器t0中断允许 tmod=0x20; / 使用定时器t0的模式1(13位计数器) th1=0xfd; tl1=0xfd; tr1=1;/ 1602命令程序void day() /unsigned char i; write_com(0x38); write_com(0x0f); write_com(0x06); write_com(0x01); 2.2 89c52rc单片机的介绍at89c52是美国atmel公司生产的低电压、高性能cmos 8位单片机,片内含8kb的可反复檫写的程序存储器和12b的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准mcs-51指令系统,片内配置通用8位中央处理器(cpu)和flash存储单元,功能强大的at89c52单片机可灵活应用于各种控制领域。at89c52单片机属于at89c51单片机的增强型,与intel公司的80c52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。其主要工作特性是:片内程序存储器内含8kb的flash程序存储器,可擦写寿命为1000次;片内数据存储器内含256字节的ram;具有32根可编程i/o口线;具有3个可编程定时器;中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;串行口是具有一个全双工的可编程串行通信口;具有一个数据指针dptr;低功耗工作模式有空闲模式和掉电模式;具有可编程的3级程序锁定位;at89c52工作电源电压为5(1+0.2)v,且典型值为5v;at89c52最高工作频率为24mhz。 调试过程与方法 c程序的调试与下载到开发板上软件vb串口程序调试软件结 论 经过将近一周的单片机课程设计,终于完成了我们基于串口通信的校园点歌系统的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计自己尽心尽力了。在本次设计的过程中,我发现很多的问题,这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如数据加减时,用bcd码还是用16进制的数直接加减,哪种效果比较好,有很多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我真真正正的意识到,我还有很多的欠缺,在vb的编程中有很多的属性都弄不懂,不明白;在单片机中串口通讯的编程的不足。在以后的学习中,能够更加努力的学习改进,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。其次,在这次的课程设计中,让我发现很多有趣的事情,像vb能够编写出跟电脑有关的程序,还有单片机实现平常生活中的小电子产品如音乐播放,数字时钟,电子琴等等。那我明白人类的智慧是无穷无尽的只要你想得出就能够实现。致 谢在这次课程设计的撰写过程中,我得到了许多人的帮助。首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。同时感谢和我一起参与合作的几位同学。最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。学生签名:赵恒日 期:2011年12月30日星期五12月参考文献附件一1 单片机c语言应用100例#include /包含51单片机寄存器定义的头文件sbit lcden=p34;sbit rw=p36;sbit rs=p35;sbit dula=p26;sbit wela=p27;unsigned char code tab1=yishengpingan; unsigned char code tab2=liangzilaohu; unsigned char code tab3=shengrikuaile;unsigned char code tab4=xuexiaoxiaoge;sbit sound=p23; /将sound位定义为p3.7unsigned int c,bb,i,dat; /储存定时器的定时常数/以下是c调低音的音频宏定义#define l_dao 262 /将“l_dao”宏定义为低音“1”的频率262hz#define l_re 286 /将“l_re”宏定义为低音“2”的频率286hz#define l_mi 311 /将“l_mi”宏定义为低音“3”的频率311hz#define l_fa 349 /将“l_fa”宏定义为低音“4”的频率349hz#define l_sao 392 /将“l_sao”宏定义为低音“5”的频率392hz#define l_la 440 /将“l_a”宏定义为低音“6”的频率440hz#define l_xi 494 /将“l_xi”宏定义为低音“7”的频率494hz/以下是c调中音的音频宏定义#define dao 523 /将“dao”宏定义为中音“1”的频率523hz#define re 587 /将“re”宏定义为中音“2”的频率587hz#define mi 659 /将“mi”宏定义为中音“3”的频率659hz#define fa 698 /将“fa”宏定义为中音“4”的频率698hz#define sao 784 /将“sao”宏定义为中音“5”的频率784hz#define la 880 /将“la”宏定义为中音“6”的频率880hz#define xi 987 /将“xi”宏定义为中音“7”的频率523h /以下是c调高音的音频宏定义#define h_dao 1046 /将“h_dao”宏定义为高音“1”的频率1046hz#define h_re 1174 /将“h_re”宏定义为高音“2”的频率1174hz#define h_mi 1318 /将“h_mi”宏定义为高音“3”的频率1318hz#define h_fa 1396 /将“h_fa”宏定义为高音“4”的频率1396hz#define h_sao 1567 /将“h_sao”宏定义为高音“5”的频率1567hz#define h_la 1760 /将“h_la”宏定义为高音“6”的频率1760hz#define h_xi 1975 /将“h_xi”宏定义为高音“7”的频率1975hz/以下是渴望片头曲的一段简谱 unsigned int code f1=re,mi,re,dao,l_la,dao,l_la, /每行对应一小节音符 l_sao,l_mi,l_sao,l_la,dao, l_la,dao,sao,la,mi,sao, re, mi,re,mi,sao,mi, l_sao,l_mi,l_sao,l_la,dao, l_la,l_la,dao,l_la,l_sao,l_re,l_mi,l_sao,re,re,sao,la,sao,fa,mi,sao,mi,la,sao,mi,re,mi,l_la,dao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,dao,re,l_la,dao,re,mi,re,l_la,dao,re,l_la,dao,re,mi,re,0xff; /以0xff作为音符的结束标志/以下是简谱中每个音符的节拍/4对应4个延时单位,2对应2个延时单位,1对应1个延时单位 unsigned char code jp1 =4,1,1,4,1,1,2, 2,2,2,2,8,4,2,3,1,2,2,10,4,2,2,4,4,2,2,2,2,4, 2,2,2,2,2,2,2,10,4,4,4,2,2,4,2,4,4,4,2,2,2,2,2,2,10,4,2,2,4,4,2,2,2,2,6,4,2,2,4,1,1,4,10,4,2,2,4,1,1,4,10; unsigned int code f2= dao.re,mi,dao , dao.re,mi,dao, mi,fa,sao, mi,fa,sao, sao,la,sao,fa,mi,dao, sao,la,sao,fa,mi,dao, dao,sao,dao, dao,sao,dao, 0xff ; unsigned char code jp2 = 4,4,4,4, 4,4,4,4, 4,4,8, 4,4,8, 2,1,2,1 ,4,4, 2,1,2,1 ,4,4, 4,4,8, 4,4,8, ; unsigned int code f3=l_sao,l_sao, l_la,l_sao,dao, l_xi,l_sao,l_sao, l_la,l_sao,re, dao,l_sao,l_sao,sao,mi,dao,l_xi,la,fa,fa,l_mi,l_mi,l_fa,l_mi,dao,l_xi,l_sao,l_sao,l_fa,l_mi,re,dao,l_sao,l_sao,mi,mi,dao,l_xi,l_la,l_la,l_la,mi,dao,re,mi,0xff ; unsigned char code jp3 = 2,2, 3,3,3, 3,3,3, 3,2,2, 3,3,3, 3,2,2, 3,3,3, 3,3,2,2, 2,2, 3,3,3, 3,2,2, 3,3,3, 3,2,2, 3,3,3, 3,3,2,2, 3,3,3,3, unsigned int code f4= re,re,re,re, sao,sao,sao,sao,mi,mi,xi,sao,la,l_la,l_la,re,mi,mi,re,re,mi,dao,l_la,l_la,dao,l_la,sao,re,mi,dao,l_la,sao,re,mi,la,la,la,sao,la,la,la,mi,re,dao,re,re,re,re,mi,re,dao,l_la,l_la,sao,la,la,mi,sao,la,dao,la,la,mi,sao,la,dao,la,la,mi,sao,la,dao,la,dao,l_la,sao,re,mi,re,re,dao,re,mi,sao,re,dao,re,la,sao,sao,mi,sao,la,xi,sao,mi,mi,xi,la,sao,la,0xff ; unsigned char code jp4 =4,2,2,2,4, 2,1,1,2,2,4, 4,2,2,2,4, 2,2,2,2,4, 2,1,1,2,2,4, 4,2,2,4, 2,1,1,2,2,2,2,2, 4, 4,2,2,2,4, 2,1,1,2,2,4, 4,2,2,2,4, 2,2,2,2,4, 2,1,1,2,2,4, 4,2,2,4, 2,1,1,2,2,4,2,2, 4,4, 4, 4,2,2,1,1,4, 2,2,2,1,1,4, 4,2,2,1,1,4, 2,2,2,2,4,2,1,1,2,2,4, 2,2,2,2,4, 2,2,2,4,4, 4, 2,2,2,2,4,2, 4 ;void delay(unsigned int z)unsigned char x,y;for(x=z;x0;x-)for(y=110;y0;y-); void write_com(unsigned char com ) rs=0; delay(5); lcden=1; delay(10); p0=com; delay(5); lcden=0; delay(5); void write_data(unsigned char dat,unsigned char add) write_com(0x80+add); rs=1; delay(5); lcden=1; p0=dat; delay(5); lcden=0; delay(5);void delay() unsigned char i,j; for(i=0;i250;i+) for(j=0;j250;j+) ; void init() rw=0; lcden=0; dula=0; wela=0; scon=0x50; ea=1; es=1; ps=1; et0=1; /定时器t0中断允许 tmod=0x20; / 使用定时器t0的模式1(13位计数器) th1=0xfd; tl1=0xfd; tr1=1; void send(unsigned char s) bb=1; sbuf=s ; while(ti=0) ; ti=0; bb=0; void day()/unsigned char i; write_com(0x38);write_com(0x0f);write_com(0x06);write_com(0x01);void song1() unsigned char i,j; /*write_com(0x80);*/ /send(0x01); /测试 i=0; /从第1个音符f0开始播放 while(f1i!=0xff) /只要没有读到结束标志就继续播放 c=460830/f1i; th0=(8192-c)/32; /可证明这是13位计数器th0高8位的赋初值方法 tl0=(8192-c)%32; /可证明这是13位计数器tl0低5位的赋初值方法 tr0=1; /启动定时器t0 for(j=0;jjp1i;j+) /控制节拍数 delay(); /延时1个节拍单位 tr0=0; /关闭定时器t0 i+; /播放下一个音符 void song2() unsigned char i,j; /*write_com(0x80);*/ /send(0x01); /测试 i=0; /从第1个音符f0开始播放 while(f2i!=0xff) /只要没有读到结束标志就继续播放 c=460830/f2i; th0=(8192-c)/32; /可证明这是13位计数器th0高8位的赋初值方法 tl0=(8192-c)%32; /可证明这是13位计数器tl0低5位的赋初值方法 tr0=1; /启动定时器t0 for(j=0;jjp2i;j+) /控制节拍数 delay(); /延时1个节拍单位 tr0=0; /关闭定时器t0 i+; /播放下一个音符 void song3() unsigned char i,j; /*write_com(0x80);*/ /send(0x01); /测试 i=0; /从第1个音符f0开始播放 while(f3i!=0xff) /只要没有读到结束标志就继续播放 c=460830/f3i; th0=(8192-c)/32; /可证明这是13位计数器th0高8位的赋初值方法 tl0=(8

温馨提示

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

评论

0/150

提交评论