西安交通大学电子系统设计专题实验.(DOC)
【西安交通大学】【数字逻辑实验】【实验分析方案】【参考样本】
实验报告的格式封面内容:标题:数字逻辑电路专题实验报告副标题:——<设计工程的名称)班级:姓名:学号:同组成员:(姓名>日期:联系电话:报告的内容:1.实验目的2.实验工程名称与实现的功能目标3.详细的系统设计方案:系统模块图、状态图、状态表、ASM图等;4.各功能模块说明:子模块电路原理图、状态图、状态表、ASM图等;各逻辑图、表达式、或HDL代码的分析及其相关说明等;输入、输出信号的时间图<时序图);6. 测试结果的分析:模拟仿真时各种输入、输出信号的时间图<时序图);实验的测试结果的讨论:包括实验中间结果、仿真的最终结果的分析,是否达到预期的目标与效果;遇到的问题及解决的方法。
7. 实验总结:对设计实现的工程进行评价,总结经验,尤其是对工程的进一步完善提出意见。
9.参考书或文献目录参考报告样本:数字逻辑电路专题实验报告——多功能数字钟设计班级:计算机71姓名:王三学号: 070552**同组者:孙一波日期:2009年6月30日联系电话:82670039目录一.实验目的3二.设计工程实现的目标4三.工程设计概要41. 工程整体设计概述:42. 工程设计特点:43. 个人任务说明:4四.系统设计方案51. 系统功能模块示意图:52. 功能模块说明:5总控电路5电子钟计时电路:8秒表计时电路:8电子钟、秒表显示电路:8 五.测试结果及分析91. 模拟仿真测试方案:92. 分频器模拟仿真测试波形图:93. 总控模块模拟仿真测试电路图:114. 总控模块模拟仿真测试波形图:11 六.工程总结12七.结束语12八.参考书13一.实验目的数字逻辑电路专题实验是对“数字逻辑”课程内容的全面、系统的总结、巩固和提高的一项课程实践活动。
根据数字逻辑的特点,选择相应的题目,在老师的指导下,由学生独立完成。
目的是通过实验使学生掌握数字逻辑电路设计的基本方法和技巧,正确运用MaxPlusⅡ软件及实验室多功能学习机硬件平台,完成所选题目的设计任务,并掌握数字逻辑电路测试的基本方法,训练学生的动手能力和思维方法。
西安交通大学数字电子技术实验报告
西安交通大学数字电子技术实验报告实验三、ISE基础实验预习:(1)安装ISE13.4软件。
(2)按照视频文件“Verilog语言输入法D_Flip_Flop.exe”进行演练。
实验内容和步骤:下载开发板相关器件的Datasheet,了解其性能。
按照P249附录A“FPGA实验预习报告模板”中的内容和步骤,完成D触发器的设计、综合、实现、仿真和下载全过程,熟悉ISE编程环境和用Adept下载编程文件的方法。
1.在G盘用自己的学号建立文件夹,进入用自己学号建立的文件夹后,再建立本次实验的文件夹,及本次实验所建工程的文件夹,文件夹名可以起名为:D_Flip_Flop、My_FirstISE、或Experiment_1、或Test_1,等等。
2.建立工程文件。
3.输入D触发器的Verilog程序。
4.编写D触发器的约束文件。
5.综合、实现及生成编程文件。
6.基于ISim的行为仿真。
7.采用Adept软件下载*.bit 程序到开发板。
8.测试D触发器的逻辑功能。
通过D触发器设计熟悉ISE软件后,自己设计一个门电路,例如与非门,重复以上ISE 软件的使用步骤。
验收:1.按照老师布置的逻辑门电路设计Verilog语言程序、约束文件、下载、仿真。
要能说明任一时刻输入输出的逻辑关系。
2.能够用开发板演示所设计的逻辑功能。
实验程序1.VERILOG工程文件module D_Flip_Flop(input clk,input set,input D,input clr,output reg q //注意:always模块中的输出必须是寄存器型变量);always @(posedge clk or posedge clr or posedge set)beginif(clr) q<=0;else if(set) q<=1;else q<=D;endendmodule2.约束文件NET "clk" LOC ="B8"; //时钟NET "D" LOC ="N3"; //SW7NET "set" LOC ="L3"; //SW1NET "clr" LOC ="P11"; //SW0NET "q" LOC ="G1"; //LD73.仿真文件module test_D_Flip_Flop;// Inputsreg clk;reg set;reg D;reg clr;// Outputswire q;// Instantiate the Unit Under Test (UUT) D_Flip_Flop uut (.clk(clk),.set(set),.D(D),.clr(clr),.q(q));initial begin// Initialize Inputsclk=0;set=1;D=0;clr=0;// Wait 100 ns for global reset to finish #100;// Add stimulus hereEndalways#10clk=~clk;always#12D=~D;always#33clk=~clk;always#42set=~set;endmodule仿真结果:实验四、组合逻辑电路实验Ⅰ(2学时)组合逻辑Ⅰ:(1)使用VERILOG设计一个新的逻辑功能(比如四输入或门、或非门、与或非门等等),并在开发板上验证,比如:进实验室前编写好VERILOG源文件、约束文件和仿真文件(见4.1.2,P101(2))。
西安交通大学电子专题实验实验报告
一:实验目的和要求
(1)了解完整的PCB板设计工序及方法;
(2)掌握制作元件原理图库、封装库的方法;
(3)掌握PCB板设计方法及其后处理;
(4)学习并掌握Protel DXP软件平台。
二:实验用仪器和软件环境
(1)微机(最低配置: Pentium 4 CPU, 128M内存);
(2)Protel DXP 2004软件;
(3)Windows XP环境
三:实验设计题目及实现的功能
本实验要求在Protel DXP软件平台上设计AVR单片机开发板电路的PCB板,根据学号分配任务,我要画的是RST、OSC、Power 、JTAG、LED、红外的电路图及对应的PCB板。
Protel DXP允许你从原理图直接运行一个大型电路仿真的阵列,通过仿真,可以显示它的波形。
四:实验步骤及结果
(1)创建一个新项目
(2)创建一个新的原理图图纸
电路图
显示器元件图
(3)设置项目选项
(4)创建一个新的PCB文件。
西安交通大学《数字逻辑电路》课内实验报告
西安交通大学电子技术实验报告——智力抢答器的设计班级:姓名:学号:日期:2015年6月30日联系电话:一、实验目的电子技术专题实验是对《数字逻辑电路》课程内容的全面、系统的总结、巩固和提高的一项课程实践活动。
通过智力抢答器的设计与分析实验,加强与巩固学对数字逻辑电路设计的基本方法和技巧的掌握,同时熟悉QuartusⅡ软件及实验室多功能学习机硬件平台,并掌握数字逻辑电路测试的基本方法,训练学生的动手能力和思维方法。
通过本实验,一方面提高学生运用数字逻辑电路解决实际问题的能力,另一方面使学生更深入的理解所学知识,将理论与实际问题相结合,为以后的计算机硬件课程的学习奠定良好的基础。
二、系统设计概要1、项目名称————智力抢答器的设计2、系统设计要求在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等多种手段指示出第一抢答者。
同时,还可以设置计分、犯规及奖惩计录等多种功能。
本设计的具体要求是:(1) 设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。
(2) 电路具有第一抢答信号的鉴别和锁存功能。
(3) 设置计分电路。
(4) 设置犯规电路。
三、系统设计方案1、总体概述根据系统设计要求可知,系统的输入信号有:各组的抢答按钮A、B、C、D,系统清零信号CLR,系统时钟信号CLK,计分复位端RST,加分按钮端ADD,计时预置控制端LDN,计时使能端EN,计时预置数据调整按钮TA、TB;系统的输出信号有:四个组抢答成功与否的指示灯控制信号输出口LEDA、LEDB、LEDC、LEDD,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。
根据以上的分析,我们可将整个系统分为三个主要模块:抢答鉴别模块QDJB;抢答计时模块JSQ;抢答计分模块JFQ。
对于需显示的信息,需增加或外接译码器YMQ,进行显示译码。
最新西安交通大学电子系统设计c51单片机数字钟实验
n单片机数字钟实验报告姓名:高航班级:信息43学号:2140502058PART 1 实验目的在单片机c51实验板上编程实现2017年日历和实时时钟:1.时-分-秒(2位-2位-2位)显示;2.可通过按键置入时间值(参照电子表设置时间工作模式);3.可通过按键控制在LED上从右向左滚动显示年_月_ 日3次,如:2013_01_20空空2013_01_20 ;4.实现每日闹铃提醒功能,闹铃时间可用按键设置。
闹铃采用提示音表示;5.实现秒表功能;6.实现定时器功能(预置定时时间,按键启动,倒计时,计到0响提示音;7.设计实现音乐提示音;8.能够在短时间按要求修改。
PART 2 实验流程图1.总流程图2.设置时间/日期/闹钟模块dis()3.音乐模块music()PART 3 实验代码代码使用资源:Program Size: data=102.0 xdata=0 code=2420 #include<reg51.h>#include<absacc.h>#define uint unsigned int#define uchar unsigned charuchar t0h,t0l,timeaaa;uchar code FREQH[] = {0x01, //0的时候没有音符0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音1234567 uchar code FREQL[] = {0x01, //0的时候没有音符0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音1234567 uchar code tiger[]={3,2,2, 6,2,2, 7,2,2, 5,2,2,3,2,2, 6,2,2, 7,2,2, 5,2,2,7,2,2, 1,3,2, 2,3,4,7,2,2, 1,3,2, 2,3,4,2,3,1, 3,3,1, 2,3,1, 1,3,1, 7,2,2, 5,2,2,2,3,1, 3,3,1, 2,3,1, 1,3,1, 7,2,2, 5,2,2,6,2,2, 2,2,2, 5,2,4, 6,2,2, 2,2,2, 5,2,4,0,0,0};sbit aa=P1^6;unsigned char time[]={0,0,0x08,0,0,0x08,0,0} ; //时间显示数组unsigned char timeZ[]={0,0,0x08,0,0,0x08,0,0} ;//闹钟显示数组unsigned char timeD[]={0,0,0x08,0,0,0x08,0,0} ;//倒计时显示数组unsigned char timeN[]={0,0,0x08,0,0,0x08,0,0} ;//秒表显示数组unsigned char dateset[]={0,0,0x08,0,0,0x08,0,0} ;//riqishezhi显示数组unsigned char code num[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数字unsigned char date[]={0,0,0,0,0,0,0,0,0,0,0,0,0x08,0,0,0x08,0,0,0,0,0,0,0,0};//日期显示unsigned char sec=0,min=0,hour=0,day=24,mon=10,j,t,a,p;int year=2017;unsigned char secZ=0,minZ=1,hourZ=0;unsigned char secD,minD,hourD;unsigned char tsec,secN,minN,tsecm;*****************************LED显示延时函数********************************void delay(unsigned char p){unsigned char i,j;for(;p>0;p--)for(i=5;i>0;i--)for(j=120;j>0;j--);}*******************************获取按键函数***********************************unsigned char getkeycode(void){unsigned char line=0x00; /*行码*/unsigned char col=0x00; /*列码*/unsigned char scancode=0x01; /*行扫描码*/unsigned char keycode; /*键号*/XBYTE[0x8000]=0xff;col=XBYTE[0x8000]&0x0f; /*从列端口读入四位列码*/if (col==0x00)keycode=0x00;else{while((scancode&0x0f)!=0) /*取scancode的低四位,没变为全0,循环*/{line=scancode; /*行号*/XBYTE[0x8000]=scancode; /*给行赋扫描码,第一行为0x01*/if((XBYTE[0x8000]&0x0f)==col) /*检测按键所在的行跳出循环*/break;scancode=scancode<<1; /*行扫描码左移一位,转下一行*/}col=col<<4; /*把列码移到高四位*/keycode=col|line;}return keycode;}*******************************时间显示函数***********************************void timedis(){XBYTE[0X9000]=0;for (j=0;j<8;j++){time[0]=num[sec%10];time[1]=num[sec/10];time[3]=num[min%10];time[4]=num[min/10];time[6]=num[hour%10];time[7]=num[hour/10];delay(1);XBYTE[0X8000] =0x01<<j;XBYTE[0X9000] =time[j];}} //time show*******************************闹钟显示函数***********************************void timedisZ(){XBYTE[0X9000]=0;for (j=0;j<8;j++){timeZ[0]=num[secZ%10];timeZ[1]=num[secZ/10];timeZ[3]=num[minZ%10];timeZ[4]=num[minZ/10];timeZ[6]=num[hourZ%10];timeZ[7]=num[hourZ/10];delay(1);XBYTE[0X8000] =0x01<<j;XBYTE[0X9000] =timeZ[j];}}*******************************秒表显示函数***********************************void timedisN(){while(1){for(;tsec==20;){tsec=0;secN++;if(secN==60){minN++;secN=0;}}if(getkeycode()==0x84)break;XBYTE[0X9000]=0;for (j=0;j<8;j++){timeN[0]=num[tsec%10];timeN[1]=num[tsec/10];timeN[3]=num[secN%10];timeN[4]=num[secN/10];timeN[6]=num[minN%10];timeN[7]=num[minN/10];delay(1);XBYTE[0X8000] =0x01<<j;XBYTE[0X9000] =timeN[j];//if(getkeycode()==0x84)break;}} } //秒表*****************************倒计时显示函数***********************************void timedisD(){while(1){if(minD==0&&secD==0)break;XBYTE[0X9000]=0;for (j=0;j<8;j++){timeD[0]=num[secD%10];timeD[1]=num[secD/10];timeD[3]=num[minD%10];timeD[4]=num[minD/10];timeD[6]=num[hourD%10];timeD[7]=num[hourD/10];delay(1);XBYTE[0X8000] =0x01<<j;XBYTE[0X9000] =timeD[j];}}}*******************************日期显示函数***********************************void datedis(){unsigned char i,j,k;for (i=0;i<17;i++){ for(k=0;k<20;k++)for (j=0;j<8;j++){ date[13]=num[day/10];date[14]=num[day%10];date[16]=num[mon/10];date[17]=num[mon%10];date[11]=num[year%10];date[10]=num[(year%100)/10];date[9]=num[(year%1000)/100];date[8]=num[year/1000];XBYTE[0X8000] = 0x80>>j;XBYTE[0X9000] = date[i+j];delay(1);}}} //date show//downto zero bibii****************************年月日设置显示函数*******************************void datedis1(){XBYTE[0X9000]=0;for (j=0;j<8;j++){dateset[6]=num[year%10];dateset[7]=num[(year%100)/10];dateset[3]=num[mon%10];dateset[4]=num[mon/10];dateset[0]=num[day%10];dateset[1]=num[day/10];delay(1);XBYTE[0X8000] =0x01<<j;XBYTE[0X9000] =dateset[j];}}*******************************时间设置函数***********************************void set(){unsigned char i=0;{for(i=0;i<3;){timedis();if (getkeycode()==0x11){ delay(100);i++;}if (getkeycode()==0x21){ delay(100);switch (i){case 0: sec++;if(sec==60){sec=0;}break;case 1: min++;if(min==60){min=0;}break;case 2: hour++;if(hour==24){hour=0;}break;default: break;} }} }} //时间设置//timeset*******************************闹钟设置函数***********************************void setZ(){unsigned char i=0;{for(i=0;i<3;){timedisZ();if (getkeycode()==0x11){ delay(100);i++;}if (getkeycode()==0x21){ delay(100);switch (i){case 0: secZ++;if(secZ==60){secZ=0;}break;case 1: minZ++;if(minZ==60){minZ=0;}break;case 2: hourZ++;if(hourZ==24){hourZ=0;}break;default: break;} }} }} //alarm set*******************************日期设置函数***********************************void setdate(){unsigned char i=0;{for(i=0;i<3;){datedis1();if (getkeycode()==0x11){ delay(100);i++;}if (getkeycode()==0x21){ delay(100);switch (i){case 0: day++;if(day==32){day=0;}break;case 1: mon++;if(mon==13){mon=0;}break;case 2: year++;break;default: break;} }} }}*****************************定时器0中断函数*********************************void timer() interrupt 1{t++; //计数溢出后t++if(getkeycode()==0x82){tsec=0;secN=0;minN=0;}if(getkeycode()!=0x22){tsec++;}if (t==20)//1s{if (getkeycode()==0x48){ while(1){set();break;}}//进入时间设置if (getkeycode()==0x14){ while(1){setdate();break;}}//日期设置sec++; t=0;secD--;if(secD==(-1)){secD=59;minD--;}if(minD==(-1)){minD=59;}if(sec==60){sec=0;min++;}if(min==60){min=0;hour++;}if(hour==24){hour=0;day++;}if((day==32)&&(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)){d ay=1;mon++;}if((day==31)&&(mon==4||mon==6||mon==9||mon==11)){day=1;mon++;}if(year%4==0&&year%400!=0&&mon==2&&day>=30){day=1;mon++;}if(year%4!=0&&mon==2&&day>=29) {day=1;mon++;}}}void reset (void){t=0;TMOD=0x01; //模式选择TL0=0xb0;TH0=0x3c; // TH1=(65536-9216)/256; TL1=(65536-9216)%256;PT0=0; //定时器优先ET0=1; // 定时器中断允许TR0=1;//开始定时EA=1; //cpu允许stop} //time go on*****************************定时器1中断函数*********************************void t0int() interrupt 3 {TR1 = 0; //先关闭T0aa = ~aa; //输出方波, 发音TH1 = t0h; //下次的中断时间, 这个时间, 控制音调高低TL1 = t0l;TR1 = 1; //启动T0}void delayaaa(uchar t) {uchar a;while(t--) //四重循环, 共延时t个1/4拍{/* for(c=193;c>0;c--)for(b=114;b>0;b--) //114*/for(a=10;a>0;a--){timedis();}}//延时期间, 可进入T0中断去发音//timedis(); 没用TR1 = 0; //关闭T0, 停止发音}void singachar() {TR1=0;TH1 = t0h; //控制音调TL1 = t0l;TR1 = 1; //启动T0, 由T0输出方波去发音delayaaa(timeaaa);//控制时间长度即节拍}void song(uchar *str){uchar k,i;i = 0;timeaaa=1;while(timeaaa){k = str[i] + 7 * (str[i + 1]);//第i个是音符, 第i+1个是第几个八度t0h = FREQH[k]; //从数据表中读出频率数值t0l = FREQL[k]; //实际上, 是定时的时间长度timeaaa = str[i + 2]; //读出时间长度数值节拍时间i+= 3;singachar();if(getkeycode()==0x22)break;//stop noise}}void music(void){TMOD = 0x01; //置T0定时工作方式1ET1= 1; //开T0中断EA = 1; //开CPU中断while(1){song(tiger);aa=1;if(getkeycode()==0x22)break;delayaaa(20);//timedis();}}*********************************MAIN函数************************************ void main(){reset();while(1){timedis();if(getkeycode()==0x88){setZ();} //闹钟设置if(getkeycode()==0x28){for(p=0;p<3;p++){datedis();}} //日期if(getkeycode()==0x18){secD=20;minD=0;timedisD();if(minD==0&&secD==0){music();}}//倒计时if(getkeycode()==0x44){minN=0;tsec=0;secN=0;timedisN();}//秒表if(secZ==sec&&minZ==min&&hourZ==hour) {music();}}}************************************OVER**************************************PART 4 实验心得实验虽然已经验收完毕,但收获却是弥足珍贵。
杨鹏-1055102-计算机04-电子系统设计报告
uint8_t tmp1=hztab[12*(y+h)+tmpx+w]; uint8_t tmp2=arr[h*2+w]; tmp1>>=tmpy; tmp1<<=tmpy; tmp2>>=(6-tmpy); hztab[12*(y+h)+tmpx+w]=tmp1+tmp2; tmp1=hztab[12*(y+h)+tmpx+w+1]; tmp2=arr[h*2+w]; tmp1<<=(6-tmpy); tmp1>>=(6-tmpy); tmp2<<=(tmpy); hztab[24*(y+h)+tmpx+w+1]=tmp1|tmp2; } } //setBlack(); } void CHIP_Init() { DDRB = 0xFF; DDRC = 0xFF; DDRD = 0xFF; DDRE = 0xFF; DDRF = 0xFF; DDRG = 0xFF; PORTD = 0x00; PORTE = 0x08; PORTF = 0x00; PORTC |= 0x20; PORTB = 0xFF; PORTC = 0x02; PORTG |= 0x18; PORTB = 0x00; PORTG = 0x00; } void wait_free() { uint8_t retb; D_PORT = 0xFF; DDRB = 0x00;
电子系统设计 专题实验报告
姓名:杨鹏 学号:10055102 班级:计算机 04
西安交通大学 2013/5/15
1
实验一 基于 AVR ATmega 128 的硬件 PCB 设计
西安交通大学模电实验报告(2)
模拟电子技术实验实验报告西安交通大学电信学院计算机11班姓名:司默涵电话:187****7918学号:2110505018实验日期:2013年4月日报告完成日期:2013年4月日实验 2.2 含负反馈的多级晶体管放大电路预习报告一、实验目的1.构建多级共射极放大电路,对静态工作点、放大倍数进行调节,使其满足设计要求。
2.测量多级放大电路的放大倍数、输入电阻、输出电阻和频率特性。
3.在多级放大电路中引入电压串联负反馈。
4.测量负反馈电路的放大倍数、输入电阻、输出电阻和频率特性等,并与开环放大电路相应的技术指标进行比较。
二、实验原理本实验要求将2个共射极单管放大电路,按照阻容耦合方式进行级联,并在此基础上,由输出端引入电压串连负反馈。
对整个电路的要求,一般靠各个放大电路的指标体现。
因此,需要事先对单元电路的指标提出要求。
本实验中,我们首先构建一个多级的、开环放大倍数大于2000的放大电路,并在此基础上引入电压串联负反馈。
1.多级放大电路图2.2.1为一个2级共射极放大电路。
与图2.1.1所示电路的主要区别是,这个电路具有稳定静态工作点的作用。
第一级和第二级的静态工作点互不干扰,第一级放大电路的静态分析如下,第二级静态分析类推:根据晶体管微变等效电路,对放大电路的动态分析如下:当和相差较大时,为其中较大的。
当和接近时,根据电路参数和实际调试结果,在晶体管β大约为100左右时,整个放大电路的电压放大倍数约为几千倍,输入电阻约为2kΩ左右,输出电阻约为1kΩ左右,下限截止频率约为100Hz左右,上限截止频率约为30kHz左右。
当然,上述参数只是一个大致范围,具体指标将与各自电路参数有关。
电路调节过程如下:1) 首先按照图2.2.1在面包板上搭接电路;2) 在C2右端观察输出,按照实验2.1方法,对前级电路进行静态工作点调节;3) 从C2左端断开,按照实验2.1方法,对后级放大电路单独调节静态工作点;4) 重新连接电路,测试放大倍数,此时两个放大器都处于最佳的静态工作点,观察电压放大倍数是否满足大于2000的要求;如果满足,则调试结束;5) 如果不满足,则增加前级的R C,或者减小R W1,此时静态工作点开始向饱和区靠拢,就是牺牲了最佳静态工作点,获取满足要求的电压放大倍数。
电子系统设计实验报告
实验报告格式要求二.实验目的、任务和要求:本实验要求设计SCI串行接口芯片, 其功能包括串行及并行数据的接收和互相转换。
三.实验系统结构设计分析1.模块划分思想和方法:该芯片需根据功能分为串并转换电路和并串转换电路两部分。
实现串并转换的关键器件就是移位寄存器, 其功能可以使串行输入的数据先寄存到一个位矢量中, 等到一组数据全部输入完毕后再一起处理, 并行输出。
而实现并串转换的关键器件是锁存器, 它可以将并行输入的数据先锁存起来, 再一位一位的转化成串行数据。
计数器在这一芯片中也起到了重要作用, 因为计数器可以产生时间脉冲的分频, 用于配合时间脉冲控制各器件的工作。
2.各模块引脚定义和作用.串并电路:输入: rxd读入数据, clk系统时钟, reset计数器复位端, rd读入控制四进制计数器:C4四分频十进制计数器:Count_10计数分量, C10四十分频(c4的十分频)移位寄存器:Read读入数据, d0~d9并行输出(d0起始端, d1~d8数据端, d9校验位(本实验中不起作用))锁存器:K0~k7数据位状态发生器:RdST读入状态(0为读入, 1为寄存器已满)四.实验代码设计以及分析:1.给出模块层次图;2.按模块完成的代码及注释.USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCI ISPORT(cs,rxd,clk,SCIrd,reset,SCIwr,in7,in6,in5,in4,in3,in2,in1,in0: IN STD_LOGIC;rdFULL,tdEMPTY,c4:buffer std_logic;e7,e6,e5,e4,e3,e2,e1,e0,wxd:OUT STD_LOGIC);END SCI;ARCHITECTURE WORK OF SCI ISSIGNAL wr,rd,read,c10,d9,d8,d7,d6,d5,d4,d3,d2,d1,d0,k7,k6,k5,k4,k3,k2,k1,k0,mid: STD_ULOGIC;SIGNAL wri : STD_LOGIC_vector(7 downto 0);SIGNAL count_10 ,counter_8:std_logic_vector(3 downto 0);BEGINPROCESS(cs)BEGINrd<=cs OR SCIrd;wr<=cs OR SCIwr;END PROCESS;//注释: 片选输入, cs=1时, 串入并出为“写”, 并入串出为“读”;cs=0时, 串入并出为“读”, 并入串出为“写”;PROCESS(rxd)BEGINread<=rxd;END PROCESS;PROCESS(clk)VARIABLE count_4 : STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINIF(clk'EVENT AND clk='1')THENIF(count_4="00")THENcount_4 := "01";c4 <= '1';ELSIF(count_4="01")THENcount_4 := "11";c4 <= '1';ELSIF(count_4="11")THENcount_4 := "10";c4 <= '0';ELSIF(count_4="10")THENcount_4 := "00";c4 <= '0';END IF;END IF;END PROCESS;PROCESS(c4)BEGINIF(c4'EVENT AND c4='1')THENIF(rd='1')THENd0<=read;d1<=d0;d2<=d1;d3<=d2;d4<=d3;d5<=d4;d6<=d5;d7<=d6;d8<=d7;d9<=d8;END IF;END IF;END PROCESS;PROCESS(c4,reset,rd)BEGINIF(reset='0' OR rd='0')THEN count_10<="0000";c10 <= '0';ELSIF(c4'EVENT AND c4='1')THENIF(count_10="0000" AND rxd='1' AND rdFULL='0')THEN count_10 <= "0001";c10 <= '0';ELSIF(count_10="0001")THENcount_10 <= "0010";c10 <= '0';ELSIF(count_10="0010")THENcount_10 <= "0011";c10 <= '0';ELSIF(count_10="0011")THENcount_10 <= "0100";c10 <= '0';ELSIF(count_10="0100")THENcount_10 <= "0101";c10 <= '0';ELSIF(count_10="0101")THENcount_10 <= "0110";c10 <= '0';ELSIF(count_10="0110")THENcount_10 <= "0111";c10 <= '0';ELSIF(count_10="0111")THENcount_10 <= "1000";c10 <= '0';ELSIF(count_10="1000")THENcount_10 <= "1001";c10 <= '0';ELSIF(count_10="1001")THENcount_10 <= "1010";c10 <= '0';ELSIF(count_10="1010")THENcount_10 <= "1011";c10 <= '1'; END IF;END IF;END PROCESS;PROCESS(c10)BEGINIF(c10'EVENT AND c10='1')THENk7<=d8;k6<=d7;k5<=d6;k4<=d5;k3<=d4;k2<=d3;k1<=d2;k0<=d1;END IF;END PROCESS;PROCESS(rd)BEGINIF(rd='0')THENe7<=k7;e6<=k6;e5<=k5;e4<=k4;e3<=k3;e2<=k2;e1<=k1;e0<=k0;END IF;END PROCESS;PROCESS(rd,c10)BEGINIF(rd='0')THEN rdFULL<='0';ELSIF(c10='1')THENrdFULL<='1';ELSE rdFULL<='0';END IF;END PROCESS;process(wr)beginif(wr='0')thenwri(0)<=in0;wri(1)<=in1;wri(2)<=in2;wri(3)<=in3;wri(4)<=in4;wri(5)<=in5;wri(6)<=in6;wri(7)<=in7;end if;end process;process(c4)beginif(c4'event and c4='1')thenif(wr='0')thencounter_8<="0000";elsif(wr='1' and counter_8="0000")then counter_8<="0001"; elsif(counter_8="0001")then counter_8<="0010";elsif(counter_8="0010")then counter_8<="0011";elsif(counter_8="0011")then counter_8<="0100";elsif(counter_8="0100")then counter_8<="0101"; elsif(counter_8="0101")then counter_8<="0110";elsif(counter_8="0110")then counter_8<="0111";elsif(counter_8="0111")then counter_8<="1000";elsif(counter_8="1000")then counter_8<="1001";end if;end if;end process;process(wr,counter_8)beginif(wr='1' and counter_8="1001")thenmid<='1';tdEMPTY<='1';elsif(wr='0')thenmid<='0';tdEMPTY<='0';end if;end process;process(counter_8)beginif(wr='0' or mid='1')thenwxd<='0';elsif(wr='1' and mid='0')thenif(counter_8="0001")thenwxd<=wri(0);elsif(counter_8="0010")thenwxd<=wri(1);elsif(counter_8="0011")thenwxd<=wri(2);elsif(counter_8="0100")thenwxd<=wri(3);elsif(counter_8="0101")thenwxd<=wri(4);elsif(counter_8="0110")thenwxd<=wri(5);elsif(counter_8="0111")thenwxd<=wri(6);elsif(counter_8="1000" )thenwxd<=wri(7);end if;end if;end process;END WORK;五.仿真图(输入输出波形)以及分析:六.实验问题分析和经验总结:在该实验的设计中, 我们发现时序逻辑中最重要的部分就是时间信号对各进程的控制, 因为为了保持各进程在时间上的同步性和正确性, 需要用一个或几个相关联的时间信号来控制各进程。
西安交通大学电子技术实习电子密码锁实验报告
西安交通大学电子技术实习电子密码锁实验报告:电子技术实验报告——电子密码锁设计班级:物联网81姓名:李威江学号:2184411027日期:2020年7月12日目目录一.实验目的................................................................... .......................................3二.项目设计概要................................................................... ................................31.设计实现的目标................................................................... .........................32.整体设计概述................................................................... ............................33.项目设计特点................................................................... ............................3三.系统设计方案................................................................... ................................41.系统功能模块设计示意图:................................................................. ........42.密码锁输入电路的总概括................................................................... .........53.密码锁输入电路各主要功能模块的设计......................................................54.密码锁控制电路的设计................................................................... .............65.密码锁显示电路的设计................................................................... .............76.密码锁的整体组装设计................................................................... .............8四.仿真测试结果及分析................................................................... .....................91.键盘输入去抖电路的仿真:............................................错误!!未定义书签。
西电电子信息系统综合实验报告
电子信息系统综合实验报告班级:姓名:学号:目录实验目的 (33)实验内容 (33)实验步骤 (44)FPGA实验——流水灯 (44)MATLAB实验——复杂噪声产生实验 (1010)FPGA实验——噪声产生及正弦信号产生 (1111)MATLAB实验——数字下变频及匹配滤波 (1818)DSP实验——匹配滤波 (1919)DSP实验——中端闪灯 (2020)DSP实验——单频信号产生 (2525)DSP实验——二相编码信号产生 (2525)DSP实验——线性调频信号产生 (2626)FPGA实验——数字下变频实验 (2626)实验结果及分析 (2828)FPGA实验——流水灯 (2828)MATLAB实验——复杂噪声产生实验 (2929)FPGA实验——噪声产生及正弦信号产生 (3131)MATLAB实验——数字下变频及匹配滤波 (3131)DSP实验——匹配滤波 (3333)DSP实验——中端闪灯 (3333)DSP实验——单频信号产生 (3434)DSP实验——二相编码信号产生 (3434)DSP实验——线性调频信号产生 (3434)FPGA实验——数字下变频实验 (3434)DSP实验——链路口测试实验 (3535)实验总结 (3535)实验分工 (3535)参考资料 (3535)实验目的本实验是对本科期间所学课程的综合应用,对FPGA设计流程MATLAB、DSP等工具进行充分的学习,通过实际实验操作,掌握FPGA、DPS电路板的使用,增强自我动手能力,以及团队协作能力。
学习如何产生正弦信号、噪声信号、单频信号、线性调频信号等,并对其实现匹配滤波等操作。
掌握MATLAB在其中的应用。
要求学生理解脉冲压缩与匹配滤波的基本原理。
是对所学知识的一次综合考核。
实验内容1. FPGA实验——流水灯用Quartus II 软件编写流水灯程序,学会使用VHDL/Verilog HDL语言,掌握FPGA设计流程,完成流水灯设计。
电子系统设计实验报告 西安交通大学 计算机
实验报告实验课程:电子系统设计与实践学生姓名:高君宇学号:2110505112专业班级:计算机15班2013年11月25日一、实验目的电子系统设计实验是计算机专业面向计算机综合应用设计的一个重要的实践环节。
主要以嵌入式单片机开发系统为主要实验平台,以此平台为基础,通过对单片机应用系统的开发设计训练,对外围接口电路的组成设计和应用编程技术训练,使学生能够掌握实现一个小型完整计算机应用系统从硬件电路设计到软件程序开发的设计过程,激发学生的创新兴趣,为以后的创新项目设计打好坚实基础。
本实验课程为独立开设的选修实验课程。
本实验课程的主要目的是让学生通过一个新型嵌入式单片机为核心的应用系统设计,掌握微型计算机硬件系统结构基本原理,软件开发编程方法,外围接口电路的组成和应用编程技术,以及电子系统设计的相关技术。
通过课程实践训练,能够让学生独立实现一个完整的计算机应用系统设计。
实验任务分为基本实验和综合应用设计实验两部分。
基本实验部分让学生学习单片机系统的基本硬件组成原理和软件程序设计方法;综合设计实验要求学生根据题目需求自行设计系统硬件组成电路,并设计实现完成相应功能的应用程序调试任务。
二、开发平台实验开发板采用技术性能优良的AVR ATmega128单片机作为核心器件,还特别设计了USB接口模块、Ethernet网络接口模块,还有MCU对外扩插槽,可为电路扩展模块提供必要的准备。
实验开发板可满足高端应用设计的要求,激发学生的创新兴趣,完成具体项目的开发设计。
学生还可以根据自己的兴趣设计制作新的目标模块实现对系统的进一步扩展。
三、实验内容(一)单片机实验系统开发环境学习1、实验目的:(1)、熟悉实验电路的结构原理、元器件名称、作用及相应的接口连接;(2)、学会使用C编译器编辑、编译、调试简单C源程序;(3)、学会使用AVR Studio集成开发软件下载调试并得到正确结果;(4)、熟悉蜂鸣器电路的编程原理。
2、实验电路原理图由图1.1所示的蜂鸣器电路可知,当BEEP引脚输出为低电平时,三极管导通,蜂鸣器鸣响;而当BEEP引脚输出为高电平时,三极管截止,蜂鸣器停止鸣响。
西安交通大学电子系统设计专题实验.(DOC)
电子系统设计专题实验报告实验一、基于 AVR ATMega128 的硬件(PCB)设计 一、 实验目的和要求目的: (1)掌握印制电路板设计的基本原则及印制电路板的设计制作流程。
(2)掌握 Protel DXP 2004 SP2 软件的基本功能。
(3)在 Protel DXP 2004 SP2 软件平台,完成电路图到 PCB 图的设计制作过 程。
要求: (1)根据实验要求, 完成原理图的设计,并在 Protel DXP 2004 SP2 软件平台 上设计制作出相应的 PCB 图。
(2)要求 PCB 图布局布线美观,抗干扰性能强。
图中所用到的元件封装必须 符合实际的元件尺寸。
二、 实验设备及设计开发环境操作系统: XP 软件:Protel DXP 2004 SP 2三、 实验内容根据 ATMega128 的电路图设计一个单片机电路板,其中包括基本电路、复位 电路、时钟振荡器(ISP、键盘、RT Clock)。
MCU 原理图如图四、 实验步骤1. 创建新的工程项目,并新建原理图图纸 2. 设置工程参数,包括基本原理图参数设置。
3. 绘制原理图:在元件库中查找所用元件,并进行必要说明,如标签、总线、 端口等。
4. 放置各个模块与图纸合适位置,方便之后端口的对接及导入。
5. 对原理图进行电气检查,编译查错时,直至消除后保存原理图。
6. 创建新的 PCB 文件,并对 PCB 进行正确合理的参数设置(注意:在设置尺 寸时,不宜设置太小,不利于元件布局及布线),保存文件。
7. 导入原理图,将元件合理放置,原则:组合功能的元件(键盘开关)有序放 置在一起,使得各个元件布线交叉尽可能的少。
8. 对电路板自动布线,进行规则检查,注意检查 PCB 有没有缺线、缺元件的 情况修改错误的地方,并注意印刷线路的宽度设置,不宜太宽。
9. 重复步骤 8,对电路板布局不断进行修改优化,直到 PCB 的规则检查没有警告、错误,电路板元件布局思路清晰,布线方式正确合理。
西安交大电子技术时序电路实验
成绩西安交通大学实验报告第页(共页)课程电子技术实验实验日期:年月日专业班号:电气12 组别:交报告日期:年月日姓名:崔彧菲学号:2110401038 报告退发:(订正、重做)同组者_____________________________ 教师审批签字:实验名称:时序电路实验一.实验目的1.学习使用HDL进行时序电路设计;2.学习编辑顶层文件和用户约束文件;3.熟悉同步与异步的概念及实现方法;4.熟悉在Basys2开发板简单外围设备的控制;5.熟悉时钟的分频方法及占空比的调节。
二.预习内容1.用HDL设计一个秒脉冲(1s,2s,3s)发生器,并用LED显示:本题编译已通过1.1 HDL源文件(Verilog):分析:本电路设计主要分为三个模块:分频模块、计数模块及译码模块。
可采用并行的方式编译各模块,再通过顶层文件进行调用。
由于本电路较为简单,在此不再编译顶层模块。
module mod10(input clk,clr,output reg[6:0] a_to_g,output wire[3:0] an,output reg[3:0]q);assign an=4'b1110; //最右译码管使能reg [26:0] counter;//时钟分频模块(默认clk为50MHZ,分频至1HZ,即1s)always @(posedge clk)if(counter==25000000) counter <= 0; //达到一半时计数归零else counter <= counter+1;reg clk_div; //引入新的电平always @(posedge clk)if(counter==25000000) clk_div <= ~clk_div; //达到一半时电平翻转,使占空比为50% *同理可知,要使脉冲的周期变为2s、3s,只须用50MHZ除以相应的频率,得到所需分频数(50000000,75000000)。
西安交通大学数字逻辑电路试验报告
电子技术实验报告交通控制器的分析与设计班级:姓名:学号:日期:2016年6月联系电话:一、实验目的 (3)二、项目设计概要 (3)三、系统设计方案 (4)四、测试结果及分析 (9)五、项目总结 (10)六、结束语 (10)七、参考书 (10).实验目的数字逻辑电路专题实验是紧紧围绕数字逻辑这门课程进行的一个有实践性特质的课程,主要考察的是对于数字逻辑这门课程中比较重要的知识点的掌握程度和灵活运用程度,也考察了实际操作能力和对于特殊情况和意外情况的处理能力。
通过对于译码器编码器等器件的实际操作和对相应变成软件的实际应用,达到对于这门课程更为深入理解这一目的。
同时,为解决实际生活中的问题有一定的指导意义,也能更好地对实际生活中的一些组合部件有更好地认识。
项目设计概要1.设计实现的目标设计一个由一条主干道和一条支干道的汇合点形成的十字交叉路口的交通灯控制器,具体要求如下:(1)主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。
(2)主干道处于常允许通行状态,而支干道有车来才允许通行。
(3)当主、支道均有车时,两者交替允许通行,主干道每次放行45 s,支干道每次放行25 s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5 s的黄灯作为过渡,并进行减计时显示。
2.整体设计概述交通控制器拟由单片的CPLD/FPGA来实现,经分析设计要求,拟定整个系统由9个单元电路组成,如图所示。
JT(WE3.项目设计特点我们在项目设计过程中采用模块化设计思想,同时用变量的方式来完成计数的设计,用计数器来实现显示这一特点,使得设计变得简单。
三.系统设计方案1.系统功能模块设计示意图:2.电路模块设计输入:实验板时钟输出:七段数码管电路模块的设计:(1)交通灯控制器:将题设的要求把电路分为ABCD四个状态,A为主干道为绿灯,B为主干道为黄灯,C 为主干道为红灯,D为主干道为红灯,旁道为黄灯。
用特设的一个变量S,完成电路的即使功能,使得电路可以区分45s, 25s等时间点,并且通过if语句完成状态之间的改变。
西安交大操作系统实验报告
西安交通大学操作系统专题实验报告班级:学号:姓名:2022年4月25日目录1内核编译与系统调用 (1)1.1实验目的 (1)1.2实验内容 (1)1.3实验思想(或流程图) (1)1.4实验步骤 (1)1.5测试数据设计 (3)1.6程序运行初值及运行结果分析 (3)1.7实验总结 (4)1.7.1实验中的问题与解决过程 (4)1.7.2实验收获 (5)1.7.3意见与建议 (5)1.8附件 (5)1.8.1附件1 程序 (5)1.8.2附件2 MakeFile (8)1.8.3附件3 Readme (8)2 进程软中断与管道通信 (13)2.1实验目的 (13)2.2实验内容 (13)2.3实验思想(或流程图) (13)2.4结果分析 (15)2.5实验总结 (16)2.6源代码 (17)3 模块编程与字符设备驱动 (20)3.1实验目的 (20)3.2实验内容 (20)3.3实验总结 (21)3.4附件 (22)1内核编译与系统调用1.1实验目的掌握系统调用的设计过程,为以后设计更复杂系统奠定基础。
1.2实验内容安装Linux,熟悉Linux的操作,并编译内核,构建、使用自己的Linux内核设计系统调用:设计、添加自己的系统调用,并重新编译内核予以验证为Linux内核设计添加一个系统调用,将系统的相关信息(CPU型号、操作系统的版本号、系统中的进程等,类似于Windows的任务管理器)以文字形式列表显示于屏幕,并编写用户程序予以验证。
请参阅proc文件系统的相关说明,读取proc文件系统的相关信息,可参考实验指导书的proc编程实验1.3实验思想(或流程图)系统调用是应用程序和操作系统内核之间的功能接口,其主要目的使用户可以使用操作系统提供的有关设备管理、输入/ 输出系统、文件系统和进程控制、通信以及存储管理等方面的功能 ,而不必了解系统程序的内部结构和有关硬件细节,从而起到减轻用户负担和保护系统以及提高资源利用率的作用。
西安交通大学模电实验报告(4)
模拟电子技术实验实验报告姓名:电话:187********学号:2110505018实验日期:2013年5月日报告完成日期:2013年5月日实验 2.4 音响放大器设计预习报告一、实验目的1. 了解音响放大器的构成,并组成一个简单的音响放大器。
2. 理解音调控制器,集成功率放大器的工作原理和应用方法。
3. 理解和掌握音响放大器的主要技术指标和测试方法。
4. 根据给出的技术条件和指标,设计音响放大器。
二、实验原理1. 音响放大器的基本组成音响放大器的基本组成框图如图 2.4.1 所示。
框图所示各部分的作用如下:(1)话筒放大器话筒又称传声器,其作用是把声音信号转换为电信号,通常将输出阻抗低于600 Ω的称之为低阻话筒,而将输出阻抗高于600 Ω的称之为高阻话筒。
此外,选用话筒时还应考虑频率响应,固有噪声等要求。
话筒放大器的作用是高保真的放大较微弱的声音信号。
用作话筒放大器的运放组件除了要求输入失调电压小、低噪声外,还要求其输入阻抗远大于话筒的输出阻抗,一般而言,双极性运算放大器适合于低阻抗话筒。
FET 型运算放大器适合于高阻抗话筒。
(2)混和前置放大器混和前置放大器的作用是把 CD 唱片或磁带录音机的音乐信号与声音信号进行混和放大,通常可用如图 2.4.2 所示反相加法器电路构成。
图中U 1 和U 2 分别为上述的音乐信号和声音信号。
(3)音调控制器音调控制器的功能是根据需要按一定的规律调节音响放大器输出信号的频率响应,从而达到补偿声学特性,美化音色等目的。
它能对音频范围内的若干个频段点分别进行提升和衰减。
某一频段点的理想频率特性控制曲线如图 2.4.3 所示,而虚线为实际频率特性控制曲线。
图中 f o = 1kHz 中音频率(亦称中心频率),要求增益 A um =0dB ;f L1 低音转折频率,一般为几十赫磁;f L2= 10 f L1中音转折频率;f H1中音转折频率;f H2= 10 f H1高音转折频率,一般为几十千赫兹。
西安交通大学电实验报告(1)
模拟电子技术实验实验报告西安交通大学电信学院计算机11班姓名:司默涵电话:187********学号:2110505018实验日期:2013年4月12日报告完成日期:2013年4月日实验 2.1 晶体管单级放大器预习报告一、实验目的1、测量放大器静态工作点和放大倍数2、观察静态工作点对放大器输出波形的影响3、测量输入电阻、输出电阻4、测量放大电路的幅频特性二、实验原理1、测量晶体管的β由于晶体管生产中存在的分散性,每个同学手中的管子参数可能不一致,因此,利用各种方法测量或者估计晶体管的β,是实验前必须进行的。
获得晶体管β,常见的仪器有:晶体管图示议、万用表。
2、根据晶体管的β,合理选择电源电压和集电极电阻在这一部分,很多选择并不是唯一的。
电源电压可以选择为+12V,通过调节直流稳压电源实现。
选择R c=2kΩ。
3、估算R W和R B根据电源电压,先使静态工作点位于直流负载线中点,则:V,mA又根据,可以得到,而,可以估算出kΩ将R W+R B的估算值用R WB表示,如果β为100,则此值为377kΩ。
此时,可以按照下述方法选择电位器R W和电阻R B.确定R W+R B的最小值,也就是R B的值,此值应该比达到饱和状态的基极电阻还小,以确保调节R W为0时,晶体管肯定进入了饱和状态.一般选取.比如当β=100,可以选择R B=100kΩ。
确定R W+R B的最大值,此值一般选择为式(2。
1。
1)计算获得的R WB的2~5倍。
以保证当R W调到最大时,使得晶体管最大限度地接近截止区.因此,可以选择R W为(7。
54~18。
85)×βkΩ。
比如当β=100,可以选择R W为1MΩ~2MΩ。
电位器标称值一般局限在1、2、5三档,比如1kΩ、2kΩ、5kΩ。
4、确定其它参数电容器C1、C2的主要作用是隔直和信号耦合,同时,还在客观上造成了本放大电路不能放大低频信号。
原则上讲,这两个电容器越大,其低频性能越好.一般选取10μF~47μF。
西安交通大学电子线路实验实验报告
dat1=dat1+0.1;//步进用阶梯状曲线拟合斜线 tlc5615(400+400*sin(dat1)); Delay_us(5); Key_Init(); key=0xff; key=GetKey(); if(key!=0xff) break;} break; default:break;}}} 实验三: #include <SST89x5x4.H> #include <INTRINS.H> #include <math.h> #define uchar unsigned char #define uint unsigned int Unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值 0~9 #include "keyboard.h" #include "pcf.h"//操作总线 #include "LCDshow.h" #include "show.h"
else flag=1;} if(flag==1) {if(dat>0) {dat=dat-20; else flag=0; tlc5615(dat); } Key_Init(); key=0xff; key=GetKey(); if(key!=0xff) break;} break; case 0x04://截断三角波上三角 while(1) {if(flag==0) {if(dat<1020) {dat=dat+20;//步进用阶梯状曲线拟合斜线 if(dat<=800) tlc5615(dat);
西安交通大学,组成原理课内实验
计算机组成原理课内实验报告实验二学生姓名 高君宇 专业班级 计算机15 学 号 2110505112 所在学院 电信学院 提交日期 2014年1月18日实验二1.实验目的(1)理解计算机主存储器的分类及作用(2)掌握ROM、RAM的读写方法2.实验要求1)实验设计目标设计一个能够对实验台上的存储器读写的部件,满足以下目标:(1)一个16位的存储器地址寄存器。
该寄存器在reset为低电平时清零,在时钟clk 的上升沿加1,地址寄存器在超过ox000f后下一个时钟上升沿回到0。
(2)一个标志寄存器,在reset为低电平时复位为0,当存储器地址寄存器等于0x000f 后,下一个时钟clk的上升沿标志寄存器翻转。
(3)在标志寄存器为0时执行存储器存数功能,从存储器的0单元开始存16个16位数。
按动一次单脉冲按钮,存一次数,存的数由内部产生,不由实验台开关输入。
(4)当标志寄存器为1时,执行从存储器的0单元开始的读数功能。
按动一次单脉冲按钮,读一次数,一直读16个数。
读出的数据送入一个16位信号R[15..0]暂存。
提示:当需要从存储器读取数据时,首先将"ZZZZZZZZZZZZZZZZ"赋值给数据总线,然后才能读取存储器中的数据。
2)顶层设计实体的引脚要求引脚要求对应关系如下:(1)clk对应实验台上的时钟(单脉冲)。
(2)reset对应实验台上的CPU复位信号CPU_RST。
(3)存储器地址总线A[15..0]对应实验台上的指示灯A15—A0。
(4)存储器数据总线D[15..0]对应实验台上的数据指示灯D15—D0。
(5)16位信号R[15..0]对应实验台上的指示灯R15—R0。
(6)存储器读写信号FWR对应实验台上的FWR。
3.实验原理存储器按存取方式分,可分为随机存储器和顺序存储器。
如果存储器中的任何存储单元的内容都可随机存取,称为随机存储器,计算机中的主存储器都是随机存储器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子系统设计专题实验报告实验一、基于 AVR ATMega128 的硬件(PCB)设计 一、 实验目的和要求目的: (1)掌握印制电路板设计的基本原则及印制电路板的设计制作流程。
(2)掌握 Protel DXP 2004 SP2 软件的基本功能。
(3)在 Protel DXP 2004 SP2 软件平台,完成电路图到 PCB 图的设计制作过 程。
要求: (1)根据实验要求, 完成原理图的设计,并在 Protel DXP 2004 SP2 软件平台 上设计制作出相应的 PCB 图。
(2)要求 PCB 图布局布线美观,抗干扰性能强。
图中所用到的元件封装必须 符合实际的元件尺寸。
二、 实验设备及设计开发环境操作系统: XP 软件:Protel DXP 2004 SP 2三、 实验内容根据 ATMega128 的电路图设计一个单片机电路板,其中包括基本电路、复位 电路、时钟振荡器(ISP、键盘、RT Clock)。
MCU 原理图如图四、 实验步骤1. 创建新的工程项目,并新建原理图图纸 2. 设置工程参数,包括基本原理图参数设置。
3. 绘制原理图:在元件库中查找所用元件,并进行必要说明,如标签、总线、 端口等。
4. 放置各个模块与图纸合适位置,方便之后端口的对接及导入。
5. 对原理图进行电气检查,编译查错时,直至消除后保存原理图。
6. 创建新的 PCB 文件,并对 PCB 进行正确合理的参数设置(注意:在设置尺 寸时,不宜设置太小,不利于元件布局及布线),保存文件。
7. 导入原理图,将元件合理放置,原则:组合功能的元件(键盘开关)有序放 置在一起,使得各个元件布线交叉尽可能的少。
8. 对电路板自动布线,进行规则检查,注意检查 PCB 有没有缺线、缺元件的 情况修改错误的地方,并注意印刷线路的宽度设置,不宜太宽。
9. 重复步骤 8,对电路板布局不断进行修改优化,直到 PCB 的规则检查没有警告、错误,电路板元件布局思路清晰,布线方式正确合理。
10. 对工程文件进行保存,完成整个硬件设计流程。
五、 实验结果1.整体电路原理图如图2.PCB 图如下图(手动放置元件位置,自动布线):六、 实验总结硬件是设计的基础,认真学习掌握硬件设计的原理有助于更好的在软件 层面进行设计。
同时一个正确标准的项目设计方案,方便设计人员阅读的同 时,可以更高效的实现加工。
将理论上的电路原理图真真实实的做成了可以加工生产的电路板, 又一 次真切的感受到了理论与实际的联系。
电路图不再仅仅是停留在纸面和考试中 的分析对象,更是可以加工成为电路板,是设计实现实际功能的基础。
布线过程中, 看着元件之间密密麻麻的线路,也深切体会到优秀的设计对 于实际生产的重要性,对于实现的难易程度,容错能力,产品性能等多方面都 有着重大的影响。
这就要求设计人员,不仅仅是能够实现产品的功能,而是尽 可能将设计做到最好。
这也对我们学习提出了更高的要求,做一件事情不难, 难的是做好一件事情。
实验二、按键灭灯软件程序设计 一. 实验目的和任务要求根据规则要求实现按键灭灯小游戏的基本功能, 演示游戏过程并计算显示最 终游戏结果。
规则: 1. LED 灯随机地出现;每次闪一个灯; 2. 在 1s 内按键可以把灯灭掉; 3. 超时没按键或按错键,则灯换一个位置; 4. 每灭一个灯,马上会闪亮另外一个灯; 5. 计算 10 次灯的分数。
比如 按错一次 -5;超时一次-3;及时灭一次 +1-3 分。
使用 timer 来计时比较准确。
显示结果。
二. 实验设备及软件开发环境1. 单片机平台:AVR ATmega128 实验开发板; 2. 开发环境平台: 计算机,Windows XP 操作系统,软件开发平台:AVR Studio 4.16 集成开 发软件;WinAVR(GCC) 20080610 C 语言编译器; 下载编程工具:JTAGICE mkII 在线仿真器;三. 实验的电路原理1.LED 指示灯的硬件电路连接如下图所示。
2.数码管硬件电路连接如下图所示。
3.矩阵键盘硬件电路连接如图 6-1 所示。
按键灭灯程序由以上三大部分构成,将 led 灯与键盘按键编码对应起来,实现按键对 led 灯的控制,最后将总得分显示在数码管上。
软件设计的难度不大,主要在于 led 灯与键盘按键端口的对应。
四. 软件设计及关键过程分析软件设计流程图 游戏开始: 蜂鸣器提示PORTE |= (1 << PE3); 使 PA3 输出高电平,使蜂鸣器鸣叫 延迟一段时间之后关闭蜂鸣器设置中断计时器的 参数,计时时间 1s中断计时函数 SIGNAL(SIG_OUTPUT_COMPARE1A)执行换灯程序 switchLed() No 亮灯计数 count<10Yes调用函数 ledkeepping(){ PORTB = ~random[number]; }执行亮灯程序有无按键按下No中断计时 1s,进入中断函数 grade=grade+2;Yes按键是否正确No按键不正确,不加分 grade=grade+0;Yes按键正确加分 grade=grade+5;游戏结束 显示游戏总得分 grade数码管显示 PORTB = code[calculate()(number)]; 其中,calculate 函数计算相应位码显示得分五. 程序运行结果1.根据随机数组 random[10]使得 led 灯“随机”亮起2.十次亮灯结束,数码管显示总得分六. 实验总结软件编程设计的难度不大,关键在于如何使得 led 灯与键盘按键端口对应, 并实现按键正确时将对应的 led 灯“灭掉”。
具体实现时,采取当按键正确就切 换到下一个随机 led 灯, 而不是去改变按键对应的 led 灯的端口值,一定程度上 使得问题简化。
程序采用将学过的知识模块联合, 主要由 led 灯, 键盘, 数码管三部分构成。
实验中也发现了一些问题: 当按键时间过长时,可能使得下一个 led 灯亮时也判断到了该按键已经按 下,错误的记录下该按键,得分记录不准确。
处理思路: 当下一个 led 灯亮起, 且判断到有按键按下时, 判断按键是否与之前按键编 码相同,如果不同,则为一次独立的按键;如果相同,则为上一个 led 灯的延迟 按键,需重新对键盘进行一次 scan。
附录 1 软件源代码#include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include <avr/signal.h> #include "digitron.h" #define LINE1_SCAN() PORTC = (PORTC | _BV(PC7)) & ~_BV(PC6) #define MASK 0xFF #include "led.h" uint8_t code[10] = { 0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90 }; uint8_t random[11] = { 0x01,0x04,0x02,0x10,0x40,0x80,0x02,0x08, 0x80,0x20,0x40 }; uint8_t led_sel=0x01; int number=1,grade=0,count=0; int com = 1; void system_init() //系统初始化 { //关闭 8 个 LED 灯 DDRB = 0xff; //设置 PB 端口为输出 DDRC |= _BV(PC5); //设置 PC5 为输出 PORTC |= _BV(PC5); //置 PC5 为高电平,使能 led 锁存 PORTB = 0xff; PORTB = PB_MASK; DDRB = PB_MASK; PORTC |= _BV(LED_CS); DDRC |= _BV(LED_CS); //关闭数码管显示 DDRG |= _BV(PG3); //设置 PG3 为输出,PG3 控制数码管的位选择锁存器; DDRG |= _BV(PG4); //设置 PG4 为输出,PG4 控制数码管的段码锁存器; PORTG |= _BV(PG3); //使能数码管位选择锁存器 PORTG &= ~_BV(PG4); PORTB = 0x00; //关闭字型码锁存器 DDRB = 0xff; //设置端口 PB 为输出 //送数码管位码 //关闭 8 个 led 灯 PORTC &= ~_BV(PC5); //PC5 置低,关闭 led 锁存器器PORTG &= ~_BV(PG3); //关闭数码管位选择锁存器PORTG |= _BV(PG4); //使能段码锁存器PORTB = 0xff; //送段码PORTG &= ~_BV(PG4); //关闭段码锁存器//关闭蜂鸣器DDRE |= _BV(PE3);PORTE |= _BV(PE3); //喇叭电路断开,喇叭停止鸣响}void DIG_Init(){PORTB = ~PB_MASK;DDRB = PB_MASK;PORTG &= 0x00;DDRG |= _BV(DIG_CS1) | _BV(DIG_CS2);}void KP_Init(){// CHIP_Init();系统端口初始化DDRB = 0xFF;DDRC = 0xFF;DDRD = 0xFF;DDRE = 0xFF;DDRF = 0xFF;DDRG = 0xFF;PORTD = 0x00;PORTE = 0x08;PORTF = 0x00;PORTC |= 0x20;PORTB = 0xFF;PORTC = 0x02;PORTG |= 0x18;PORTB = 0x00;PORTG = 0x00;// 键盘端口初始化PORTC &= 0x3F;DDRC |= 0xC0;PORTB = 0xFF;DDRB = 0x00;uint8_t KP_read(){_delay_ms(10);asm("nop");uint8_t read = PINB;return read;}uint8_t KP_scan(){uint8_t code = MASK;uint8_t key = MASK;//scan the first lineLINE1_SCAN();LINE1_SCAN();code = KP_read();if(code != MASK){_delay_ms(10);code = KP_read();if(code != MASK){switch(code){case 0xFE:key = 0x01;break; case 0xFD:key = 0x02;break; case 0xFB:key = 0x04;break; case 0xF7:key = 0x08;break; case 0xEF:key = 0x10;break; case 0xDF:key = 0x20;break; case 0xBF:key = 0x40;break; case 0x7F:key = 0x80;break; }}}//if no key is pressed, return 0x00 return key;}void LED_Init(){PORTB = PB_MASK;DDRB = PB_MASK;PORTC |= _BV(LED_CS);DDRC |= _BV(LED_CS);}int calculate(int number){switch (number){case 0:return grade/10;break;case 1:return grade%10;break;default:return 10;}}//亮灯程序不变k;void ledkeepping(){LED_Init();PORTB = ~random[number];_delay_ms(5);}//亮灯程序void switchLed(){TCNT1H = 0x00; //T/C1计数值清零 TCNT1L = 0x00;LED_Init();PORTB = ~random[number];number=number+1;count=count+1;_delay_ms(5);if(number==10){number=1;}if(count>10){TCCR1B = 0x00;}}//中断程序SIGNAL(SIG_OUTPUT_COMPARE1A){TCNT1H = 0x00; //T/C1计数值清零TCNT1L = 0x00;grade=grade+2;switchLed();}void DIG_Dispaly();{com=1;for(number = 0; number < 2; number++){PORTG |= _BV(DIG_CS2);PORTG &= ~_BV(DIG_CS1);PORTB = code[calculate()(number)];PORTG |= _BV(DIG_CS1);PORTG &= ~_BV(DIG_CS2);PORTB = com;com *= 2;PORTG &= ~_BV(DIG_CS1);PORTG &= ~_BV(DIG_CS2);_delay_ms(2);}}int main(void){system_init(); //系统初始化PORTE |= (1 << PE3); //使PA3输出高电平,使蜂鸣器鸣叫_delay_ms(100);_delay_ms(100);PORTE |= (1 << PE3); //使PA3输出高电平,使蜂鸣器不响TCCR1B = 0x00; //中断控制寄存器清零,停止T/Cl计数OCR1AH = 0xAA; //设置8MHz、256分频、定时1s的比较值,OCR1AL = 0x12; //与TCNTl的计数值进行比较,若匹配产生中断 TCCR1A = 0x00; //T/C1普通端口模式TCCR1B = 0x04; //启动定时器T/C1,256分频TIMSK |= 0x10; //使能C/Tl比较匹配中断sei(); //允许全局中断while(1){if(count<10){KP_Init();uint8_t led_press,led_temp;led_press=KP_scan();ledkeepping();KP_Init();led_temp=KP_scan();if(led_press!=MASK){if(led_press!=led_temp){if(led_press==random[number]) {grade=grade+5;}else{grade=grade+0;}switchLed();_delay_ms(5);}}else{ledkeepping();_delay_ms(1);}}else{DIG_Init();//数码管初始化DIG_Dispaly();//数码管显示得分}}}。