单片机实验报告_微固学院_熊万安_第1页
单片机实验报告_微固学院_熊万安_第2页
单片机实验报告_微固学院_熊万安_第3页
单片机实验报告_微固学院_熊万安_第4页
单片机实验报告_微固学院_熊万安_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、电子科技大学 微固 学院实 验 报 告实验名称 单片机原理与应用姓名:学号:评分:教师签字电子科技大学教务处制电 子 科 技 大 学实 验 报 告学生姓名: 学号: 指导教师:熊万安实验地点: 实验时间: 一、 实验室名称: 电子技术综合实验室二、 实验项目名称: 数码管显示A/D转换的电压值三、 实验学时: 12四、 实验目的与任务:1、 熟悉系统设计与实现原理2、 掌握KEIL C51的基本使用方法3、 熟悉实验板的应用4、 连接电路,编程调试,实现各部分的功能5、 完成系统软件的编写与调试五、 实验器材1、 PC机一台2、 实验板一块六、 实验原理、步骤及内容试验要求:1.数码管可在第2

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端输

3、出,接着要求自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转换结果;对本次转换的输入模拟信号采样

4、并保持;启动本次A/D转换开始。数码管动态显示原理:先把第一个数码管的显示数据送到数据线,同时选通DIS_COM1,而其他数码管的DIS_COMx信号禁止;延迟一段时间(通常不超过10ms),再把第二个数码管的显示数据送到数据线,同时选通DIS_COM2,而其他数码管的DIS_COMx信号禁止;延时一段时间,在显示下一个。(注意:整个数码管的扫描频率应当大于50Hz,防止出现明显的闪烁。)矩阵键盘扫描原理:按键逻辑是连接在P2.0到P2.7之间的。当按钮不按下的时候,输入为高电平,当按下按键后,P2.x与地相连,输入为低电平,所以按钮低电平有效。3、 软件设计(完成程序框图,手写画出框图)状态

5、转换key2按键Key3按键key1按键 电压值大于2V?开始初始化显示键盘扫描思考题: 按键改用外部中断模式,电路如何修改(画示意图)?程序如何修改,写出中断服务程序。答:如果按键改用外部中断模式,可以使用外部中断、,需要将按钮分别用导线连接到、外部中断接口。如图所示:程序在系统总的初始化函数中,需要进行外部中断的初始化:EA=0;/禁止总中断EX0=1;/使能INT0中断EX1=1;/使能INT1中断EA=1;/使能总中断添加中断服务处理函数:Void T0INTSVC() interrupt 0.七、 总结及心得体会 通过这几次的实验实践加深了对单片机原理和应用的理解,掌握了KEIL C

6、51开发环境的基本使用方法,熟悉了单片机开发板的基本应用。同时通过实验掌握了数码管动态显示、矩阵键盘扫描、A/D转换的基本原理。八、 对本实验过程及方法、手段的改进建议1.建议增加实验课时,通过更多的动手实践来加深对单片机的理解。2.建议增加串行口通信等方面的实验。九、 附录1、 程序(五号字体)/*利用TLC549 A/D转换器实现电压测量与显示*/#include <reg51.h>/包含8051的SFR寄存器定义头文件#include <absacc.h>/扩展并行接口所需的绝对地址访问库函数#define LED_digXBYTE0x9000/8位数码管显示器的

7、位选输出控制#define LED_seg XBYTE0x8000/8位数码管显示器的段码(字形码)输出控制#define KEY_IN XBYTE0x8000#define STUDENT_NUMBER_MIN 4#define STUDENT_NUMBER 4#define STUDENT_NUMBER_MAX 9/定义TLC549操作接口sbit ADC_CS = P17;sbit ADC_DATA = P16;sbit ADC_CLK = P15;code unsigned char disp_seg=/显示段码0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x

8、07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x71,0x40,0x00,0xff; / 0 1 2 3 4 5 6 7 8 9 a b c d e f - blank,全亮unsigned char DispBuf8;/定义显示缓冲区(由定时中断程序自动扫描)void delay(int ms);/延时大约1msunsigned char ReadAdc(void);/读取A/D转换结果void AdcInit(void);/初始化ADC接口unsigned char stopwatch_flag;unsigned char key_value;unsigne

9、d char student_number;char delta;unsigned char key_flags3;void key_scan(void);unsigned int cnt;void main()unsigned char i=0;unsigned char volt, x100, x10, x;unsigned char t;student_number = 4;stopwatch_flag = 0;delta = 1;TMOD &= 0x0f;TMOD |= 0x10;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;ET1 = 1;EA =1;AdcIn

10、it();for(i=0; i<3; i+)key_flagsi = 0; DispBuf3 = 16; DispBuf2 = student_number/10; DispBuf1 = student_number%10; DispBuf0 = 17; DispBuf7 = 17;for(;)volt = ReadAdc();if(key_value != 0 && volt <= 200)t=key_value;delay(20);if(key_value = t)/消除抖动switch(key_value)case 1:key_flags2 = 0;if(1

11、= key_flags0)stopwatch_flag = 0;student_number = STUDENT_NUMBER;key_flags0 = 1;elsestopwatch_flag = 1;cnt = 0;delta = 1;key_flags0 = 0;break;case 2:key_flags0 = 1;key_flags2 = 0;if(1 = stopwatch_flag)stopwatch_flag = 0;elsestopwatch_flag = 1;cnt=0;break;case 3:key_flags0 = 1;if(1 = key_flags2)stopwa

12、tch_flag = 1;cnt = 0;delta = -1;key_flags2=0;elsestudent_number = STUDENT_NUMBER_MAX;stopwatch_flag = 0;key_flags2 = 1;break;default:break;while(!key_value);/等待按键弹起volt = ReadAdc();/得到A/D转换结果的数字量(0x000xff)volt = volt * 250/256;/转换成电压值,其中Vr=2.5Vx100 = volt/100;x10 = (volt - x100*100)/10;x = (volt - x

13、100*100)%10;DispBuf6 = x100; DispBuf5 = x10;DispBuf4 = x;delay(100);/每次测量后延时0.1s/*函数:T1INTSVC()功能:定时器T1的中断服务函数*/void T1INTSVC() interrupt 3code unsigned char com = 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;static unsigned char n = 0; TR1 = 0;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;LED_dig = 0xFF;/暂停显示if( n = 6

14、)LED_seg = ( disp_segDispBufn | 0x80 );/更新扫描数据,带小数点显示elseLED_seg = disp_segDispBufn;/更新扫描数据LED_dig = comn;/重新显示if( stopwatch_flag )if( 1000 = cnt )cnt = 0;student_number += delta;if( student_number >= 10)student_number = STUDENT_NUMBER_MIN;else if( student_number <= 3)student_number = STUDENT_

15、NUMBER_MAX;DispBuf2 = student_number/10;DispBuf1 = student_number%10;cnt +;key_scan();n+;n &= 0x07;void delay(int ms)unsigned int i,j;for(i=0; i<ms; i+)/延时大约1ms (fosc=11.0592MHz)for(j=0; j<100; j+);/*函数:ReadAdc()功能:读取A/D转换结果返回:8位ADC代码*/unsigned char ReadAdc(void)unsigned char d;/读取得ADC结果un

16、signed char n;/ADC bit位计数ADC_CS = 0;n = 5;while ( -n != 0 );/模拟tsu时间n = 8;dod <<= 1;if ( ADC_DATA ) d = d | 0x01;/或d+;ADC_CLK = 1;ADC_CLK = 0;while ( -n != 0 );ADC_CS = 1;return d;/*函数:AdcInit()功能:初始化ADC接口*/void AdcInit(void)ADC_CS = 1;ADC_CLK = 0;ADC_DATA = 1;ReadAdc();/空读一次,用于启动一次A/D转换过程void key_scan(void)unsigned char key_in;key_in = KEY_IN;switch(key_in)case 0xff:key_value = 0;bre

温馨提示

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

评论

0/150

提交评论