当前位置:文档之家› 现代电子技术综合实验报告

现代电子技术综合实验报告

电子科技大学电子工程学院实验报告实验名称现代电子技术综合实验姓名:学号:评分:教师签字电子科技大学教务处制电子科技大学实验报告学生姓名:学号:指导教师:实验地点:实验时间:一、实验室名称:电子技术综合实验室二、实验项目名称:现代电子技术综合实验三、实验学时: 40四、实验目的与任务:1、熟悉系统设计与实现原理2、掌握KEIL C51的基本使用方法3、熟悉SMART SOPC实验箱的应用4、连接电路,编程调试,实现各部分的功能5、完成系统软件的编写与调试五、实验器材1、PC机一台2、示波器、SMART SOPC实验箱一套六、实验原理、步骤及内容(一)试验要求1)、程序开始后:当核心板上LED的D1~D8只有第1个发光二极管亮时,同时第1个数码管显示数字1,其余显示‘-’;持续秒之后,只有第2个发光二极管亮,同时第2个数码管显示数字2,其余显示‘-’;再过秒,只有第3个发光二极管亮,同时第3个数码管显示数字3,其余显示‘-’;……;间隔秒后,只有第8个发光二极管亮,同时第8个数码管显示数字8,其余显示‘-’。

此后进入循环状态。

循环过程中,按按键进入任务2。

2)、停止任务1中发光二极管显示,核心板上数码管的第1、2位显示学号最后二位,第4、5、6位显示‘-’。

第7、8位实现秒表功能,从开始倒计时,计时到后程序自动进入任务3.3)、核心板上数码管其余不显示,第6、7、8位显示三位电压值(~),增减调节电压值,LED1亮度跟随变化。

按按键进入任务1。

(二)实验内容1、硬件设计2、各部分硬件原理数码管动态扫描原理:动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。

选亮数码管采用动态扫描显示。

所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

PWM调节LED亮度工作原理: PWM信号波形是一系列占空比可调的方波脉冲。

该信号经低通滤波器后,可得到一个电压与占空比成正比的直流电压信号,当方波频率达到50Hz以上是,人眼基本无法觉察到闪烁,只能感觉到平均亮度(相当于低通滤波器)。

I2C工作原理:I2C总线由两根信号线组成,一根是串行数据线SDA,另一根是串行时钟线SCL。

I2C总线信号的连接方法如下图所示。

一般具有I2C总线的器件其SDA和SCL引脚都是漏极开路(或集电极开路)输出结构。

因此实际使用时,SDA和SCL信号线都必须接上拉电阻。

上拉电阻一般取值3-10KΩ。

ADC工作原理及应用:3、软件设计(三)思考题程序任务跳转的按键改用外部中断模式,电路如何修改(画示意图)程序如何修改,写出中断服务程序。

答:将KEY1与KEY2键通过跳线分别接到(INT0)与(INT1)接口上。

示意图及程序如下。

图7 示意图开启中断:SysInit(){EA=0; //禁止总中断EX1=1; //使能/INT1中断EX0=1; //使能/INT0中断EA=1; //使能总中断}中断服务程序:void keypress1 () interrupt 0{if (!(P3&0x04)){delay(10); //稍作延时,用于去抖if (!(P3&0x04))flag_keypress1=1; //被按下while(!(P3&0x04)); //等待释放}}void keypress2 () interrupt 2{if (!(P3&0x08)){delay(10); //稍作延时,用于去抖if (!(P3&0x08))flag_keypress2=1; //被按下while(!(P3&0x08)); //等待释放}}七、总结及心得体会通过本次实验熟悉了系统设计与实现原理,基本掌握了KEIL C51的基本使用方法,熟悉了SMART SOPC实验箱的应用。

并且实现了各部分的功能完成系统软件的编写与调试。

八、对本实验过程及方法、手段的改进建议九、附录#include <>#include <>#include <>#include <>#include ""#define PWM_MAX 50#define uchar unsigned charunsigned char v;unsigned char f;unsigned char sw;unsigned char g;unsigned char m;unsigned char DispBuf[8];unsigned char PwmValue;sbit KEY2 = P2^0;sbit CS = P1^5;sbit DAT = P1^7;sbit CLK = P1^6;/*函数:ReadAdc()功能:读取A/D转换结果*/unsigned char ReadAdc(){unsigned char d;unsigned char n;CS = 0;n = 5;while ( --n != 0 );n = 8;do{d <<= 1;if ( DAT ) d++;CLK = 1;CLK = 0;}while ( --n != 0 );CS = 1;return d;}/*函数:DispClear()功能:清除数码管的所有显示*/void DispClear(){unsigned char i;for ( i=0; i<8; i++ ){DispBuf[i] = 0x00;}}/*函数:DispChar()功能:在数码管上显示字符*/void DispChar(unsigned char x, unsigned char c, bit dp) {code unsigned char Tab[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71 };unsigned char t;x &= 0x07;x = 7 - x;if ( c == '-' ){t = 0x40;}else{t = toint(c);if ( t < 16 ){t = Tab[t];}else{t = 0x00;}}if ( dp ){t |= 0x80;}else{t&= 0x7F;}DispBuf[x] = t;}/*函数:DispStr()功能:在数码管上显示字符串*/void DispStr(unsigned char x, unsigned char *s){unsigned char c;for (;;){c = *s;if ( c == '\0' ) break;s++;DispChar(x,c);x++;}}/*函数:DispDotOn()功能:显示指定位的小数点参数:x为数码管坐标*/void DispDotOn(unsigned char x) {DispBuf[7-x] |= 0x80;}/*函数:DispInit()功能:数码管扫描显示初始化*/void DispInit(){DispClear();EA = 0;TMOD &= 0x0F;TMOD |= 0x10;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;ET1 = 1;EA = 1;}/*函数:AdcInit()功能:初始化ADC接口*/void AdcInit(){CS = 1;CLK = 0;DAT = 1;ReadAdc();}/*函数:Delay()功能:延时 t ms*/void Delay(unsigned int t){do{TH0 = 0xFA;TL0 = 0x24;TR0 = 1;while ( !TF0 );TR0 = 0;TF0 = 0;} while ( --t != 0 );}/*函数:DispVol()功能:将ADC值转换成电压值,并显示参数:v:8位ADC结果*/void DispVol(unsigned char v){DispStr(5,VolTab[v]);DispDotOn(5);}/*函数:T1INTSVC()功能:定时器T1的中断服务函数*/void T1INTSVC() interrupt 3{static unsigned char temp = 0;code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};static unsigned char n = 0;TR1 = 0;TH1 = 0xFF;TL1 = 0x00;TR1 = 1;XBYTE[0x7800] = 0xFF;XBYTE[0x7801] = ~DispBuf[n];XBYTE[0x7800] = ~com[n];n++;n &= 0x07;if(f==1){temp++;if ( temp >= PWM_MAX ) temp = 0;if ( temp <= PwmValue ){P0 =0x00;}else{P0= 0xff;}}}/*函数:SysInit()功能:系统初始化*/void SysInit1(){TMOD &= 0xF0;TMOD |= 0x01;DispInit();}void SysInit2(){TMOD &= 0xF0;TMOD |= 0x01;DispInit();DispChar(0,'0',0);DispChar(1,'9',0);DispChar(2,'-',0);DispChar(3,'-',0);DispChar(4,'-',0);DispChar(5,'-',0);}void SysInit3(){TMOD &= 0xF0;TMOD |= 0x01;TMOD &= 0x0F;TMOD |= 0x10;PwmValue = ReadAdc();P0 = 0xff;TH1 = 0xFF;TL1 = 0x00;TR1 = 1;ET1 = 1;EA = 1;DispInit();AdcInit();Delay(100);}void main(){for(;;){unsigned char s[] = "-";unsigned char i;unsigned char x;unsigned char aa;bit dp;while (KEY2 == 0) ;SysInit1();dp = 0;f=0;aa=0x7f;for (;;){for ( i=0; i<8; i++ ){P0=aa;aa=_cror_(aa, 1);for ( x=0; x<8; x++ ){if (x==i)DispChar(x,s[i],dp);elseDispChar(x,s[8],dp);}if (KEY2 == 0) break;Delay(500);}if (KEY2 == 0) break;}SysInit2();for(m=50;m>0;m--){P0=0xFF;sw=m/10;g=m%10;DispChar(6,sw+'0',1);DispChar(7,g+'0',0);Delay(100);}SysInit3();for (;;){f = 1;v = ReadAdc();DispVol(v);Delay(100);PwmValue=v/5;if (KEY2 == 0) break;}}说明:实验报告和可以运行的程序,都以电子档的形式打包发到我的邮箱()即可。

相关主题