您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机实验报告_微固学院_熊万安
电子科技大学微固学院实验报告实验名称单片机原理与应用姓名:学号:评分:教师签字电子科技大学教务处制电子科技大学实验报告学生姓名:学号:指导教师:熊万安实验地点:实验时间:一、实验室名称:电子技术综合实验室二、实验项目名称:数码管显示A/D转换的电压值三、实验学时:12四、实验目的与任务:1、熟悉系统设计与实现原理2、掌握KEILC51的基本使用方法3、熟悉实验板的应用4、连接电路,编程调试,实现各部分的功能5、完成系统软件的编写与调试五、实验器材1、PC机一台2、实验板一块六、实验原理、步骤及内容试验要求:1.数码管可在第2位到第4位显示A/D转换的电压值,可调电压,数码管第5位显示“-”号,第6、7位显示2位学号;2.再按按键key1进行切换,此时数码管第6、7位显示从学号值+5秒到学号值的循环倒计时秒表,时间间隔为1秒。按按键key2时,秒表停止计数,再按按键key2时,秒表继续计数。按按键key1可切换回任务1的显示。3.当电压值大于2伏时,按按键不起作用。1、硬件设计2、各部分硬件原理(相关各部分例如:数码管动态扫描原理;TLC549的特征及应用等)(四号字体)(所有原理含图)TLC549的特征及应用:当/CS变为低电平后,TLC559芯片被选中,同时前次转换结果的最高有效位MSB(A7)自DAT端输出,接着要求自CLK端输入8个外部时钟信号,前7个CLK信号的作用,是配合TCL549输出前次转换结果的A6-A0位,并为本次转换做准备:在第4个CLK信号由高至低的跳变之后,片内采样、保持电路对输入模拟量采样开始,第8个CLK信号的下降沿使片内采样/保持电路进入保持状态并启动A/D开始转换。转换时间为36个系统时钟周期,最大为17us。直到A/D转换完成前的这段时间内,TLC549的控制逻辑要求:或者/CS保持高电平,或者CLK时钟保持36个系统时钟周期的低电平。由此可见,在自TLC549的CLK端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次A/D转换开始。数码管动态显示原理:先把第一个数码管的显示数据送到数据线,同时选通DIS_COM1,而其他数码管的DIS_COMx信号禁止;延迟一段时间(通常不超过10ms),再把第二个数码管的显示数据送到数据线,同时选通DIS_COM2,而其他数码管的DIS_COMx信号禁止;延时一段时间,在显示下一个。(注意:整个数码管的扫描频率应当大于50Hz,防止出现明显的闪烁。)矩阵键盘扫描原理:按键逻辑是连接在P2.0到P2.7之间的。当按钮不按下的时候,输入为高电平,当按下按键后,P2.x与地相连,输入为低电平,所以按钮低电平有效。3、软件设计(完成程序框图,手写画出框图)思考题:按键改用外部中断模式,电路如何修改(画示意状态转换key2按键Key3按键key1按键电压值大于2V?开始初始化显示键盘扫描图)?程序如何修改,写出中断服务程序。答:如果按键改用外部中断模式,可以使用外部中断0TNI、1TNI,需要将按钮分别用导线连接到0TNI、1TNI外部中断接口。如图所示:程序在系统总的初始化函数中,需要进行外部中断的初始化:EA=0;//禁止总中断EX0=1;//使能INT0中断EX1=1;//使能INT1中断EA=1;//使能总中断添加中断服务处理函数:VoidT0INTSVC()interrupt0{...}七、总结及心得体会通过这几次的实验实践加深了对单片机原理和应用的理解,掌握了KEILC51开发环境的基本使用方法,熟悉了单片机开发板的基本应用。同时通过实验掌握了数码管动态显示、矩阵键盘扫描、A/D转换的基本原理。八、对本实验过程及方法、手段的改进建议1.建议增加实验课时,通过更多的动手实践来加深对单片机的理解。2.建议增加串行口通信等方面的实验。九、附录1、程序(五号字体)/*利用TLC549A/D转换器实现电压测量与显示*/#includereg51.h//包含8051的SFR寄存器定义头文件#includeabsacc.h//扩展并行接口所需的绝对地址访问库函数#defineLED_digXBYTE[0x9000]//8位数码管显示器的位选输出控制#defineLED_segXBYTE[0x8000]//8位数码管显示器的段码(字形码)输出控制#defineKEY_INXBYTE[0x8000]#defineSTUDENT_NUMBER_MIN4#defineSTUDENT_NUMBER4#defineSTUDENT_NUMBER_MAX9//定义TLC549操作接口sbitADC_CS=P1^7;sbitADC_DATA=P1^6;sbitADC_CLK=P1^5;codeunsignedchardisp_seg[]=//显示段码{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x71,0x40,0x00,0xff};//0123456789abcdef-blank,全亮unsignedcharDispBuf[8];//定义显示缓冲区(由定时中断程序自动扫描)voiddelay(intms);//延时大约1msunsignedcharReadAdc(void);//读取A/D转换结果voidAdcInit(void);//初始化ADC接口unsignedcharstopwatch_flag;unsignedcharkey_value;unsignedcharstudent_number;chardelta;unsignedcharkey_flags[3];voidkey_scan(void);unsignedintcnt;voidmain(){unsignedchari=0;unsignedcharvolt,x100,x10,x;unsignedchart;student_number=4;stopwatch_flag=0;delta=1;TMOD&=0x0f;TMOD|=0x10;TH1=0xFC;TL1=0x66;TR1=1;ET1=1;EA=1;AdcInit();for(i=0;i3;i++){key_flags[i]=0;}DispBuf[3]=16;DispBuf[2]=student_number/10;DispBuf[1]=student_number%10;DispBuf[0]=17;DispBuf[7]=17;for(;;){volt=ReadAdc();if(key_value!=0&&volt=200){t=key_value;delay(20);if(key_value==t)//消除抖动{switch(key_value){case1:key_flags[2]=0;if(1==key_flags[0]){stopwatch_flag=0;student_number=STUDENT_NUMBER;key_flags[0]=1;}else{stopwatch_flag=1;cnt=0;delta=1;key_flags[0]=0;}break;case2:key_flags[0]=1;key_flags[2]=0;if(1==stopwatch_flag){stopwatch_flag=0;}else{stopwatch_flag=1;cnt=0;}break;case3:key_flags[0]=1;if(1==key_flags[2]){stopwatch_flag=1;cnt=0;delta=-1;key_flags[2]=0;}else{student_number=STUDENT_NUMBER_MAX;stopwatch_flag=0;key_flags[2]=1;}break;default:break;}while(!key_value);//等待按键弹起}}volt=ReadAdc();//得到A/D转换结果的数字量(0x00~0xff)volt=volt*250/256;//转换成电压值,其中Vr=2.5Vx100=volt/100;x10=(volt-x100*100)/10;x=(volt-x100*100)%10;DispBuf[6]=x100;DispBuf[5]=x10;DispBuf[4]=x;delay(100);//每次测量后延时0.1s}}/*函数:T1INTSVC()功能:定时器T1的中断服务函数*/voidT1INTSVC()interrupt3{codeunsignedcharcom[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};staticunsignedcharn=0;TR1=0;TH1=0xFC;TL1=0x66;TR1=1;LED_dig=0xFF;//暂停显示if(n==6)LED_seg=~(disp_seg[DispBuf[n]]|0x80);//更新扫描数据,带小数点显示elseLED_seg=~disp_seg[DispBuf[n]];//更新扫描数据LED_dig=~com[n];//重新显示if(stopwatch_flag){if(1000==cnt){cnt=0;student_number+=delta;if(student_number=10){student_number=STUDENT_NUMBER_MIN;}elseif(student_number=3){student_number=STUDENT_NUMBER_MAX;}DispBuf[2]=student_number/10;DispBuf[1]=student_number%10;}cnt++;}key_scan();n++;n&=0x07;}voiddelay(intms){unsignedinti,j;for(i=0;ims;i++)//延时大约1ms(fosc=11.0592MHz){for(j=0;j100;j++);}}/*函数:ReadAdc()功能:读取A/D转换结果返回:8位ADC代码*/unsignedcharReadAdc(void){unsignedchard;//读取得ADC结果unsignedcharn;//ADCbit位计数ADC_CS=0;n=5;while(--n!=0);//模拟tsu时间n=8;do{d=1;if(ADC_DATA)d=d|0x01;//或d++;ADC_CLK=1;ADC_CLK=0;}while(--n!=0);ADC_CS=1;returnd;}/*函数:AdcInit()功能:初始化ADC接口*/voidAdcInit(void){ADC_CS=1;ADC_CLK=0;ADC_DATA=1;ReadAdc();//空读一次,用于启动一次A/D转换过程}voidkey_scan(void){unsignedcharkey_in;key_in=KEY_IN;switch(key_in){case0xff:key_value=0;break;case~0x01:key_value=1;break;case~0x02:key_value=2;break;case~0x04:key_value=3;break;case~0x08:key_value=4;break;case~0x10:key_value=5;break;case~0x20:key_value=3;break;case~0x40:key_value=2;break;case~0x80:key_value=1;break;default:break;}}
本文标题:单片机实验报告_微固学院_熊万安
链接地址:https://www.777doc.com/doc-4848634 .html