资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
电子科技大学 学院实实 验验 报报 告告实验名称 现代电子技术综合实验姓名: 学号: 评分:教师签字电子科技大学教务处制电 子 科 技 大 学实 验 报 告学生姓名: 学号: 指导教师:熊万安实验地点: 211 大楼 308 实验时间: 一、一、 实验室名称:实验室名称: 单片机技术综合实验室二、二、 实验项目名称:实验项目名称: 数码管显示 A/D 转换电压值及秒表三、三、 实验学时:实验学时: 12四、四、 实验目的与任务:实验目的与任务:1、熟悉系统设计与实现原理2、掌握 KEIL C51 的基本使用方法3、熟悉实验板的应用4、连接电路,编程调试,实现各部分的功能5、完成系统软件的编写与调试五、五、 实验器材实验器材1、PC 机一台2、实验板一块六、六、 实验原理、步骤及内容实验原理、步骤及内容试验要求:、数码管可在第 2 位到第 4 位显示 A/D 转换的电压值,可调电压,数码管第 5 位显示“-”号,第 6、7 位显示 2 位学号;、再按按键 key1 进行切换,此时数码管第 6、7 位显示从学号到(学号值+5 秒)的循环计时秒表,时间间隔为 1 秒。按按键 key2 时,秒表停止计数,再按按键 key2 时,秒表继续计数。按按键 key1 可切换回任务 1 的显示。、当电压值大于 2 伏时,按按键不起作用。1、硬件设计2、各部分硬件原理(相关各部分例如:数码管动态扫描原理; TLC549ADC 特征及应用等)(1)数码管动态扫描原理多位联体的动态数码管段选信号 abcdefg 和 dp(相当于数据线是公用的,而位选信号 com 是分开的。扫描方法并不难,先把第 1个数码管的显示数据送到 abcdefg 和 dp,同时选通 com1,而其它数码管的 com 信号禁止;延时一段时间(通常不超过 10ms),再把第二个数码管的显示数据送到 abcdefg 和 dp,同时选通 com2,而其他数码管的 com 信号禁止;延时一段时间,再显示下一个。注意,扫描整个数码管的频率应当保证在 50Hz 以上,否则会看到明显的闪烁。(2)TLC549ADC 特征及应用等当/CS 变为低电平后, TLC549 芯片被选中, 同时前次转换结果的最高有效位 MSB (A7)自 DAT 端输出,接着要求自 CLK 端输入 8 个外部时钟信号,前 7 个 CLK 信号的作用,是配合 TLC549 输出前次转换结果的 A6-A0 位,并为本次转换做准备:在第 4 个CLK 信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第 8 个 CLK 信号的下降沿使片内采样/保持电路进入保持状态并启动 A/D 开始转换。转换时间为 36 个系统时钟周期,最大为 17us。直到 A/D 转换完成前的这段时间内,TLC549 的控制逻辑要求:或者/CS 保持高电平,或者 CLK 时钟端保持 36 个系统时钟周期的低电平。由此可见,在自 TLC549 的 CLK 端输入 8 个外部时钟信号期间需要完成以下工作:读入前次 A/D 转换结果;对本次转换的输入模拟信号采样并保持;启动本次 A/D 转换开始。(3)共阴极数码管共阴极数码管的一段连在一起接地,所以给一个高电平,相应的段位发光。(4)按键逻辑按键逻辑是连接在 P2.0 到 P2.7 的。当按键不按下的时候,输入为高电平,当按下按键,P2.x 口与地相连,输入为低电平,所以按键是低电平有效。3、 软件设计(说明:我和另一个同学一起做的,所以在程序设计上增加了一个状态)思考题思考题: 按键改用外部中断模式,电路如何修改(画示意图)?程序如何修改,写出中断服务程序。若按键改成外部中断模式,即把按键 key2 连接在 INT0 上。电路示意图为:而中断服务程序为:void T0INTSVC() interrupt 0ET0=1; EX0=1; EA =1;if(mbiao/包含 8051 的 SFR 寄存器定义头文件 #include /扩展并行接口所需的绝对地址访问库函数 #define LED_digXBYTE0x9000/8 位数码管显示器的位选输出控制 #define LED_seg XBYTE0x8000/8 位数码管显示器的段码(字形码)输出控 制 #define KEY_IN XBYTE0x8000/定义 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,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0 x71,0x40,0x00,0xff;/ 0 1 2 3 4 5 6 7 8 9 a b c d e f - blank,全亮 unsigned char DispBuf8;/定义显示缓冲区(由定时中断程序自动扫描) unsigned char key_value; /定义按键 int flag;/定义状态标志 unsigned char y10,y;/定义秒表的个位,十分位unsigned short mbiao;/定义秒表计数单元void delay(int ms);/延时大约 1ms unsigned char ReadAdc(void);/读取 A/D 转换结果 void AdcInit(void);/初始化 ADC 接口 void key_scan(void); void main() unsigned char i=0; unsigned char volt, x100, x10, x;TMOD TMOD |= 0x10; TH1 = 0xFC; TL1 = 0x66; TR1 = 1; ET1 = 1;TMOD TMOD |= 0x01; TH0 = 0xdc; TL0 = 0x00; TR0 = 1; ET0 = 1;EA =1;AdcInit();for(i=0; i8; i+)DispBufi = 17;/全部 8 位显示灭y10=2;y=0;mbiao=2000;flag=0; while(1)while(flag =0) /初始状态学号状态 volt = ReadAdc();/得到 A/D 转换结果的数字量(0x000xff) volt = volt * 250/256;/转换成电压值,其中 Vr=2.5Vx100 = volt/100; x10 = (volt - x100*100)/10; x = (volt - x100*100)%10;DispBuf7 = 17; DispBuf6 = x100; DispBuf5 = x10; DispBuf4 = x; DispBuf3 = 16; DispBuf2 = 0; DispBuf1 = 8; DispBuf0 = 17;delay(100); if(key_value = 8while(key_value = 8);while(flag=1)/计数状态 TR0=1;volt = ReadAdc(); volt = volt * 250/256;/转换成电压值,其中 Vr=2.5Vx100 = volt/100; x10 = (volt - x100*100)/10; x = (volt - x100*100)%10; DispBuf0 = 17;DispBuf1 = y; DispBuf2 = y10; DispBuf3 = 16; DispBuf4 = x; DispBuf5 = x10; DispBuf6 = x100;DispBuf7 = 17;if(key_value = 8while(key_value = 8); else if(key_value = 7while(key_value = 7); while(flag=2)/计数暂停状态 TR0=!TR0; if(key_value = 7) flag = 1; while(key_value = 7); while(flag=3)/学号状态 volt = ReadAdc();/得到 A/D 转换结果的数字量(0x000xff) volt = volt * 250/256;/转换成电压值,其中 Vr=2.5Vx100 = volt/100; x10 = (volt - x100*100)/10; x = (volt - x100*100)%10;DispBuf7 = 17; DispBuf6 = x100; DispBuf5 = x10; DispBuf4 = x; DispBuf3 = 16; DispBuf2 = 2; DispBuf1 = 0; DispBuf0 = 17;delay(100); if(key_value = 8mbiao=2000;while(key_value = 8); /* 函数:T1INTSVC() 功能:定时器 T1 的中断服务函数 */ void T1INTSVC() interrupt 3 code 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(flag=0) if(n=6) LED_seg = (disp_segDispBufn|0x80); else LED_seg = disp_segDispBufn;/更新扫描数据 if(flag=1) if(n=6) LED_seg = (disp_segDispBufn|0x80); else if(n=4) LED_seg = ( disp_segDispBufn ); /更新扫描数据, else LED_seg = disp_segDispBufn;/更新扫描数据 if(flag=2) LED_seg = disp_segDispBufn;/更新扫描数据 if(flag=3) if(n=6) LED_seg = (disp_segDispBufn|0x80); else LED_seg = disp_segDispBufn;/更新扫描数据 LED_dig = comn;/重新显示 key_scan(); n+; n void delay(int ms) unsigned int i,j;for(i=0; ims; i+)/延时大约 1ms (fosc=11.0592MHz) for(j=0; j100; j+) ; /* 函数:ReadAdc() 功能:读取 A/D 转换结果 返回:8 位 ADC 代码 */ unsigned char ReadAdc(void) unsigned char d;/读取得 ADC 结果 unsigned char n;/ADC bit 位计数ADC_CS = 0;n =
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号