版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理试验汇报学年:______________学期:______________专业:09电子信息工程班级:______________姓名:____Pred______学号:______________指导老师:___________日期:年月日目录contentsI/O输入、输出试验…………………3数码管动态扫描显示试验……………….….………6键盘输入试验….……….……………9定期/计数器…………12音频控制试验……………..…………16串行口通信………………..…………22阐明:1.6个试验程序均在伟纳电子ME830单片机试验板上调试成功。Mcu是AT89S52。2.音频控制试验源码来自网上,若想在晶振11.0592mhz上运行,只需更改输出频率表格的定期器初值即可。同步,由于程序占用233字节data,写入一般51mcu是运行不了的,这里我是用ICE52仿真器运行。3.串行口通信试验中上位机使用伟纳电子的串口调试软件,可以到其官方网站下载。4.由于本次试验意在到达试验目的,程序自身存在诸多不完善的地方,如:定期计数器试验中取位运算中花费大量时间,导致显示过程出现闪烁现象。5.电路原理图在prorel99se上画的,不能保证原理图的对的。(我还没学呢….)试验一:I/O口输入/输出试验试验任务流水灯单循环,P0口接八个共阳发光二极管,分别为D0、D1……D7。程序先点亮D0,延时一段时间(1秒钟),再次序点亮D1……D7,然后又是D0。同步只能有一种灯亮。设晶振频率fosc=11.0592MHz,规定亮灯1秒后下一种灯点亮。试验原理图系统板上硬件连接程序设计内容先计算好定期器初值,并载入TH0,TL0等待定期器中断响应,响应后累次叠加到1s时,设置标志位检测标志位,点灭上一种灯,点亮点一种灯判断与否点亮第七个灯,是则下一种点亮第零个灯,否则跳过程序框图NNYNY开始储存显示次序定期器使能中断使能LED=1?i>7?i=0中断响应T==20?TF=0;T++;T=0;LED=1,;结束LED=0;显示数据端口;i++;YC语言源程序#include<reg52.h>#defineucharunsignedchar#defineLEDPORTP0bitledturn=0;//设置亮灯标志chari=0;ucharcodeledlight[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//led亮起次序voidmain(){RCAP2H=0x4C;//定期器2,晶振11.0592MHz,单次定期50msRCAP2L=0x00;ET2=1;//定期器2中断容许EA=1;//中断容许TR2=1;//开始计时while(1)//进入死循环{if(ledturn){ledturn=0;LEDPORT=ledlight[i];i++;if(i==8)i=0;}}}timer2()interrupt5//定期器2终端服务程序{staticuchart;TF2=0;//溢出清0t++;if(t==20){t=0;//取消标志ledturn=1;//设置亮灯标志}}数据分析这里实现流水灯单循环的措施是,依次灭掉前一种灯和点亮后一种灯,再延时一会,不停循环,当点亮到D07时候,下一种是点亮D00。如此,就可以看到流水灯单循环的效果了。试验二:数码管动态扫描显示试验试验任务在动态共阳数码管上显示89C51字样试验原理图系统板上硬件连接程序设计内容1)先准备好要显示的数据,放入对应的显示存储单元中。2)根据要使用的数码管的详细位置来确定扫描初值和扫描方向。3)根据使用数码管的个数来确定扫描的位数。4)查表将要显示的数据转换为能使数码管对的显示相对应的段码。5)分时送段码和位码,数码管开始循环显示。程序框图YYN开始存段码存位码输出段码到P0输出位码到P2i=7?i=0用i取段码用i取位码i++C语言源程序#include<reg52.h>#defineucharunsignedcharucharcodedig[]={0x10,0x08,0x04,0x02,0x01};//位码ucharcodedisplay[]={0x80,0x90,0xC6,0x92,0xF9};//段码uchari=0;voiddelayms(unsignedintms){unsignedchark;while(ms--){for(k=0;k<114;k++);}}voidmain(){P2=0xFF;P0=0xFF;while(1){P2=0xff;P0=display[i];P2=~dig[i];delayms(1);i++;if(i==5)i=0;}}数据分析显示89C51字样重要依托人的视觉停留效应,先选中第一种数码管,送入段码显示1,延迟一段时间后关闭段码,选中第二个数码管,送入段码显示2,再延迟一会儿,不停循环,直到显示到第五个数码管,再次选中第一种数码管….,这样就可以在数码管上看到89C51了。试验三:键盘输入试验试验任务在键盘上按K1、K2、K3、K4后分别在数码管上显示1、2、3、4。试验原理图系统板上硬件连接程序设计内容先准备好要显示的数据,放入对应的显示存储单元中。判断与否有按键按下,有则逐一检查那个按键。根据按下的键值,送显示数据到数码管程序框图YYYYYYYNNNN开始储存显示数据数码管初始化按键按下?!K1?!K2?!K3?!K4?P0=display[1]P0=display[0]P0=display[3]P0=display[2]按键松开?NC语言源程序#include<reg52.h>#defineucharunsignedcharucharcodedisplay[]={0xf9,0xa4,0xb0,0x99};sbitk1=P1^4;sbitk2=P1^5;sbitk3=P1^6;sbitk4=P1^7;voiddelayms(ucharms)//延时子函数,ms{uchari;while(ms--){for(i=0;i<114;i++);}}voidmain(void){P2=0xFE;//数码管初始化P0=~(0x40);P1=0xFF;//按键初始化while(1){if(P1!=0xFF){delayms(20);if(P1!=0xFF){if(!k1)P0=display[0];elseif(!k2)P0=display[1];elseif(!k3)P0=display[2];elseP0=display[3];while(P1!=0xFF);}}}}数据分析程序判断与否有按键按下,有则延迟一段时间后重新判断,有按键按下进入键值判断,否则返回。进入判断键值后,把对应的键值转为数值再转为段码送入数码管显示,进入一种“死循环”,直到按键松开后弹出。试验四:定期/计数器试验任务设置一种定期器/计数器,辨别率为0.1S,并在数码管上显示试验原理图系统板上硬件连接程序设计内容1)先准备好要显示的数据,放入对应的显示存储单元中。2)调整定期器初始值,每隔0.1S向时间累加器加一。3)根据时间累加器的值分别取毫秒、秒、十秒等位并送入对应寄存器储存。4)根据要使用的数码管的详细位置来确定扫描初值和扫描方向。5)查表将要显示的数据转换为能使数码管对的显示相对应的段码。6)分时送段码和位码,数码管开始循环显示。程序框图NNYYN开始储存段码储存位码定期器2使能中断使能数码管初始化j=0P2=~(dig[(j)]);P0=display[num[j]];j++;j==8?中断响应t=2?TF2=0;t++;timer++;时间分权位储存num[7];t=0;结束j=0;C语言源程序#include<reg52.h>unsignedcharcodedisplay[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//设置位码unsignedcharcodedig[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//设置段码unsignedcharnum[9]={0,0,0,0,0,0,0,0};unsignedchari,j,once=1;voiddelayms(unsignedcharms){chari;while(ms--){for(i=0;i<80;i++);}}voidmain(void){RCAP2H=0x4C;//定期器2载入初始值,时长50msRCAP2L=0x00;TR2=1;ET2=1;EA=1;P2=0xFF;//数码管初始化P0=0xFF;while(1){for(i=0;i<7;i++){P0=0xFF;//关显示清除“鬼影”P2=~(dig[(j)]);//送位码P0=display[num[j]];送段码delayms(1);j++;if(j==8)j=0;}}}timer()interrupt5//中断服务{staticunsignedlongtimer=0;TF2=0;P2=0xFF;//关显示,消除显示抖动if(once==2)//中断两次,累加一次{once=0;timer++;num[0]=timer%10;//个num[1]=timer/10%10;//十num[2]=timer/100%10;//百num[3]=timer/1000%10;//千num[4]=timer/10000%10;//万num[5]=timer/100000%10;//十万num[6]=timer/1000000%10;//百万num[7]=timer/10000000%10; //千万}once++;P2=~(dig[(j)]);//恢复显示}数据分析上电复位后可以在数码管上看到程序从零开始计时,精度为0.1S。这里显示数字的措施同试验二的数码管动态扫描显示试验的原理同样,所不一样的是程序根据一定的时序变化送入数码管的段码。程序每隔0.1S更新一次显示数据,即在循环显示的时候通过中断服务程序,累加时间,取各权值数值换成段码。试验五:音频控制试验试验任务上电复位后在蜂鸣器上响起音乐。试验原理图系统板上硬件连接程序设计内容储存产生不一样频率的中断初始值。乐谱解释函数:碰到拍子分隔符和空格跳过,判断与否高下音,读音符,调整为高下音音符,读音符后的升半个音符的“#”,读延长音“-”“.”,读缩短二分之一音长的“_”,字符串结束符“0x00”音乐播放函数:将音符频率的序号数组对应的频率送入定期器预置数中,再延时对应音符播放的时间。4)乐谱书写规则:1234567为7个基本音阶前面加逗号','表达这是低音前面加上点号'`'表达这是高音背面加'#',表达这个音符升半个音阶背面加'.',表达这个音符要再加长自身二分之一的延时背面加一种或多种'-',每个表达延时一拍背面加一种或多种'_',表达这个音符要缩短自身二分之一的时长,最多支持2个'_'。程序框图开始开始储存中断初始值乐谱解释函数音乐播放函数储存乐谱中断响应tl0=tl0_f;th0=th0_f;BEEP=~BEEP;结束C语言源程序#defineucharunsignedchar//定义一下以便使用#defineuintunsignedint#defineulongunsignedlong#include<reg52.h>//包括一种52原则内核的头文献charcodedx516[3]_at_0x003b;//仿真头中断用sbitBEEP=P1^7;//喇叭输出脚ucharth0_f;//在中断中装载的T0的值高8位uchartl0_f;//在中断中装载的T0的值低8位//T0的值,及输出频率对照表ucharcodefreq[36*2]={0xA9,0xEF,//00220HZ,1//00x93,0xF0,//00233HZ,1#0x73,0xF1,//00247HZ,20x49,0xF2,//00262HZ,2#0x07,0xF3,//00277HZ,30xC8,0xF3,//00294HZ,40x73,0xF4,//00311HZ,4#0x1E,0xF5,//00330HZ,50xB6,0xF5,//00349HZ,5#0x4C,0xF6,//00370HZ,60xD7,0xF6,//00392HZ,6#0x5A,0xF7,//00415HZ,70xD8,0xF7,//00440HZ1//120x4D,0xF8,//00466HZ1#//130xBD,0xF8,//00494HZ2//140x24,0xF9,//00523HZ2#//150x87,0xF9,//00554HZ3//160xE4,0xF9,//00587HZ4//170x3D,0xFA,//00622HZ4#//180x90,0xFA,//00659HZ5//190xDE,0xFA,//00698HZ5#//200x29,0xFB,//00740HZ6//210x6F,0xFB,//00784HZ6#//220xB1,0xFB,//00831HZ7//230xEF,0xFB,//00880HZ`10x2A,0xFC,//00932HZ`1#0x62,0xFC,//00988HZ`20x95,0xFC,//01046HZ`2#0xC7,0xFC,//01109HZ`30xF6,0xFC,//01175HZ`40x22,0xFD,//01244HZ`4#0x4B,0xFD,//01318HZ`50x73,0xFD,//01397HZ`5#0x98,0xFD,//01480HZ`60xBB,0xFD,//01568HZ`6#0xDC,0xFD,//01661HZ`7//35};//定期中断0,用于产生唱歌频率timer0()interrupt1{TL0=tl0_f;TH0=th0_f;//调入预定期值BEEP=~BEEP;//取反音乐输出IO}//******************************//音乐符号串解释函数//入口:要解释的音乐符号串,输出的音调串,输出的时长串changedata(uchar*song,uchar*diao,uchar*jie){uchari,i1,j;chargaodi;//高下+/-12音阶ucharbanyin;//有无半个升音阶ucharyinchang;//音长ucharcodejie7[8]={0,12,14,16,17,19,21,23};//C调的7个值*diao=*song;for(i=0,i1=0;;){gaodi=0;//高下=0banyin=0;//半音=0yinchang=4;//音长1拍if((*(song+i)=='|')||(*(song+i)==''))i++;//拍子间隔和一种空格过滤switch(*(song+i)){case',':gaodi=-12;i++;//低音break;case'`':gaodi=12;i++;//高音break;}if(*(song+i)==0)//碰到0结束{*(diao+i1)=0;//加入结束标志0*(jie+i1)=0;return;}j=*(song+i)-0x30;i++;//取出基准音j=jie7[j]+gaodi;//加上高下音yinc:switch(*(song+i)){case'#'://有半音j加一种音阶i++;j++;gotoyinc;case'-'://有一种音节加长yinchang+=4;i++;gotoyinc;case'_'://有一种音节缩短yinchang/=2;i++;gotoyinc;case'.'://有一种加半拍yinchang=yinchang+yinchang/2;i++;gotoyinc;}*(diao+i1)=j;//记录音符*(jie+i1)=yinchang;//记录音长i1++;}}//******************************************//奏乐函数//入口:要演奏的音乐符号串voidplay(uchar*songdata){uchari,c,j=0;uintn;ucharxdatadiaodata[112];//音调缓冲ucharxdatajiedata[112];//音长缓冲changedata(songdata,diaodata,jiedata);//解释音乐符号串TR0=1;for(i=0;diaodata[i]!=0;i++)//逐一符号演奏{tl0_f=freq[diaodata[i]*2];//取出对应的定期值送给T0th0_f=freq[diaodata[i]*2+1];for(c=0;c<jiedata[i];c++)//按照音长延时for(n=0;n<3;n++);TR0=0;for(n=0;n<500;n++);//音符间延时TR0=1;}TR0=0;}//仙剑乐谱ucharcodexianjian[]={"|3_3_3_2_3-|2_3_2_2_,6,6_,7_|12_1_,7,6_,5_|,6---|""3_3_3_2_3.6_|5_6_5_5_22_3_|45_4_32_1_|3.--3_|""67_6_55_3_|5--3_5_|26_5_32_3_|3---|""26_6_6-|16_6_66_7_|`17_6_76_7_|3.--3_|""67_6_55_3_|5--3_5_|67_6_76_7_|3---|""26_6_6-|16_6_66_7_|`17_6_7.5_|6---|"};//乐谱方式输入的音乐播放,仙剑奇侠传voidmain(void)//主程序{TMOD=0x01;//使用定期器0的16位工作模TR0=0;ET0=1;EA=1;while(1){play(xianjian);}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年文化交流活动安全保证合同
- 2024年技术开发与转让合同标的和属性具体说明
- DB4106T 56-2022 郑麦1860生产技术规程
- 2024年房产转让协议书
- 2024年技术转让附条件合同
- 2024年文艺沙龙组织委托
- 2024年护理服务提供合同
- 家委年度工作总结(5篇)
- 2024年度企业咨询服务与实施合同
- 2024年文化庆典合作合同
- 【初中化学】二氧化碳的实验室制取课件-2024-2025学年九年级化学人教版上册
- 2024年湖北省公务员考试《行测》真题及答案解析
- 第4章《一元一次方程》-2024-2025学年七年级数学上册单元测试卷(苏科版2024新教材)
- DB3502T 148-2024中小型水库生产运行标准化管理规程
- 公司组织机构管理制度
- 预习-21《蝉》导学案
- 四年级数学上册 第4章《运算律》单元测评必刷卷(北师大版)
- 期中测试卷(试题)-2024-2025学年数学五年级上册北师大版
- GB/T 44672-2024体外诊断医疗器械建立校准品和人体样品赋值计量溯源性的国际一致化方案的要求
- 新人教版七年级上册生物全册知识点(期末复习用)
- 2023乌鲁木齐法院书记员真题
评论
0/150
提交评论