欢迎来到天天文库
浏览记录
ID:20270886
大小:470.50 KB
页数:29页
时间:2018-10-11
《微机控制实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验一代码转换1.1实验任务1:设计并调试一个程序,将片内20H单元中8位无符号二进制数转化为BCD码,结果存入以30H开始的单元中。1.1.1程序分析及流程图:8位无符号二进制数最多可转化为3位BCD码。可以首先定义两个指针,分别为*ori和*temp,指向20H和30H的单元地址,然后利用除法,将20H中二进制数逐渐分离出个位、十位和百位,改变指针的内容,依次存入30H开始的地址空间中。流程图如下所示。1.1.2实验代码:#includeunsignedchardata*ori;unsignedchardata*temp;voi
2、dmain(){ori=0x20;temp=0x30;第29页*ori=123;*temp=(*ori)/100*16;*temp=*temp+((*ori)/10)%10;temp++;*temp=(*ori)%10*16;while(1);}1.1.3实验结果截图:执行程序之后,打开存储器,在20H单元中可以看到存储值为7B,而在30H开头的单元中为123,故转化结果正确。结果如下图所示。1.2实验任务2:设计并调试一个程序,将片内以20H开始的单元中的4字节无符号二进制数转化为BCD码,结果存入以30H开始的单元中,低位字节在低地址端。1.2.1程序分
3、析:与上相同也可以用除法来实现,将原数除10取余就得到最后一位数,再将除10得到的结果重复这一步,即除10取余,就可以得到倒数第二位数。同理,做一个循环就能取出每一位数。但需要注意一个字节的数值大小,以免溢出。流程如如下所示。第29页1.2.2实验代码:#include"c8051f020.h"#includeunsignedchardata*ptr1,*ptr2;voidmain(void){unsignedlonginttmp=0;inti,j;ptr1=0x20;ptr2=0x30;*ptr1=0x012*(ptr1+1)=0x034
4、*(ptr1+2)=0x056;*(ptr1+3)=0x078;for(i=3;i>=0;i--){tmp=tmp*256+*(ptr1+i);}while(temp!=0);{*ptr2=tmp%10;tmp=tmp/10;ptr2++;}}1.2.3实验结果:为避免20H开始的数据计算之后丢失,将其保存至temp中间变量中。20H开始的单元存放4字节数据为12345678H(即十进制305419896),运行上述程序后:(30H)à6,(31H)à9,(32H)à8,(33H)à9,(34H)à1,(35H)à4,(36H)à5,(37H)à0,(38H
5、)à31.3实验任务3:设计并调试一个程序,将累加器A中的二进制数(0~F)转化为ASCII码,结果仍放在A中。第29页1.3.1程序分析:ASCII表(部分)BINDECHEX字符BINDECHEX字符00110000483000011100056388001100014931100111001573990011001050322010000016541A0011001151333010000106642B0011010052344010000116743C0011010153355010001006844D001101105436601000101694
6、5E0011011155377010001107046F从上表可看出,判断累加器A的数值大小,若在0~9则直接加30H;若在A~F则加37H。1.3.2实验代码:#include"c8051F020.h"voidmain(void){unsignedcharA;ACC=0x0B;A=ACC;if(A>=10)A=A+0x37;elseA=A+0x30;ACC=A;}1.3.3实验结果:运行程序后,A的内容为32H;若A初始化为0X0B,则运行程序后A的内容为42H。第29页实验二液晶显示程序设计2.1实验任务1:设计并调试一个显示程序,利用所提供液晶显示器滚
7、动显示123456这六个数字,并以每字符500毫秒的速度向右移动循环。2.1.1程序分析及流程图:因例程中已写好各数字的点阵表,可直接用函数LCDC_DispWord()调用显示;每字符500毫秒右移动循环,可用延时程序并在循环里依次将显示的数字在LCD上右移实现。数字的显示函数:voidLCDC_DispWord(unsignedcharx,y,unsignedcharcode*p,unsignedcharline,length,Flag),其中x、y表示显示字符的坐标,*p表示显示字符的代码。延时函数:voidDelay_ms(unsignedintti
8、mes),其中times表示延时的毫秒数。利用LCD
此文档下载收益归作者所有