第一篇:嵌入式系统原理实验总结报告
嵌入式系统原理实验总结报告
车辆座椅控制系统实验
2014/5/23
嵌入式系统原理实验总结报告
一、技术性总结报告
(一)题目:车辆座椅控制系统实验
(二)项目概述:
1.为了实现车辆座椅控制的自动化与智能化。
2.方便用户通过智能手机与车载传感器之间的联动。3.使车辆作为当今物联网中重要的一个节点发挥作用。
4.通过车辆座椅控制系统实验实现对嵌入式系统原理课程的熟练掌握与对嵌入式系统原理知识的深化记忆。
5.加强本组学生对嵌入式系统原理的更深层次的理解与运用。
(三)技术方案及原理
本次试验分为软件、硬件两个部分。1.软件部分。
A.智能手机部分,包括通过智能手机对座椅的控制部分、手机所携带的身份信息部分。
本部分软件使用Java编写,其程序部分为: 主程序:
package com.example.seat;
import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBar;import android.support.v4.app.Fragment;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.os.Build;
import java.io.BufferedReader;import java.io.IOException;
import java.io.InputStreamReader;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.InetAddress;import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;
import android.view.KeyEvent;import android.view.View;import android.widget.Button;
public class MainActivity extends ActionBarActivity { private Button Up = null;private Button Left = null;private Button Dowm = null;private Button Right = null;private Socket socket = null;
private static final String HOST = “192.168.1.142”;
private static final int PORT = 10007;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initControl();
}
private void initControl(){
Up =(Button)findViewById(R.id.button1);
Up.setOnClickListener(new ReceiverListener());
}
class ReceiverListener implements OnClickListener {
protected String line;
@Override
public void onClick(View v){
// TODO Auto-generated method stub
new Thread(){
@Override
public void run(){
try {
Socket socket = new Socket(HOST, PORT);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
line = br.readLine();
br.close();
} catch(UnknownHostException e){
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
}.start();
}
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
super.handleMessage(msg);
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu){
// Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
// Handle action bar item clicks here.The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();
if(id == R.id.action_settings){
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
} } 界面代码:
package=“com.example.seat” android:versionCode=“1” android:versionName=“1.0” > android:name=“android.permission.ACCESS_NETWORK_STATE”/> android:minSdkVersion=“8” android:targetSdkVersion=“19” /> android:allowBackup=“true” android:icon=“@drawable/ic_launcher” android:label=“@string/app_name” android:theme=“@style/AppTheme” > android:name=“com.example.seat.MainActivity” android:label=“@string/app_name” >
host = '' port = 10007
pwm = PWM(0x6F, debug=True)
servoMin = 125 # Min pulse length out of 4096 , 0.5 servoMax = 575 # Max pulse length out of 4096 , 2.3
def setServoPulse(channel, pulse):
pulseLength = 1000000
# 1,000,000 us per second
pulseLength /= 60
# 60 Hz
print “%d us per period” % pulseLength
pulseLength /= 4096
# 12 bits of resolution
print “%d us per bit” % pulseLength
pulse *= 1000
pulse /= pulseLength
if(pulse>servoMax): pulse = servoMax
if(pulse pwm.setPWM(channel, 0, int(pulse)) pwm.setPWMFreq(60) # Set frequency to 60 Hz pwm.setPWM(0, 0, servoMax) if __name__ == '__main__': s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) s.listen(3) print 'Server is running on port %d, press Ctrl-C to terminate it.' % port pulse_ud = 1.9 pulse_lr = 1.9 setServoPulse(0,pulse_ud) setServoPulse(1,pulse_lr) while True: clientsock, clientaddr = s.accept() clientfile = clientsock.makefile('rw', 0) ctrlinfo = clientfile.readline().strip() print 'Control info is %s.n' % ctrlinfo if ctrlinfo == “up”: pulse_ud += 0.1 elif ctrlinfo == “down”: pulse_ud-= 0.1 elif ctrlinfo == “left”: pulse_lr += 0.1 elif ctrlinfo == “right”: pulse_lr-= 0.1 else: print “ERRORn” setServoPulse(0,pulse_ud) setServoPulse(1,pulse_lr) clientfile.close() clientsock.close() 2.硬件部分。 对车载座椅控制部分发出的信息的接受、识别、执行部分。本次试验使用的硬件设备包括:智能手机一部、“树莓派”一台、小舵机两台、舵机驱动板一个、无线网卡一个、杜邦线若干、5V电源一个、无线路由器一个 智能手机 树莓派(外) 树莓派(内) 小舵机 舵机驱动板 无线网卡 杜邦线 5V电源 无线路由器 (四)实验流程及结果 1.打开智能手机上的控制软件。 2.向车载座椅控制台发送信息。(发送信息分别为上、下、左、右)3.车载座椅控制台接受、识别并执行信息。4.通过小舵机的动作验证该实验是否成功。(详细见视频) 二、工作进度自评表 本次试验完成。 本次试验计划分为三个阶段。 第一阶段:智能手机部分、车载座椅控制部分和硬件部分的分别完成。本阶段完成。 第二阶段:智能手机部分、车载座椅控制部分和硬件部分的整合阶段。本阶段完成。 第三阶段:车辆座椅控制系统实验的验收调试阶段。本阶段完成。 三、组内人员自评 本次试验打到预期的实验目的。虽然在实验进行过程中遇到了不少的麻烦,但是通过我们成员自身的努力学习掌握了实验所要求的知识。最后实验的成功与组员之间的互相帮助与紧密配合是分不开的。 四、个人学习心得 本人通过此次实验,对于嵌入式系统原理有了更加深层次的了解。对于设计嵌入式系统原理的实验也有了较为高程度的提高。为了以后更进一步的学习并掌握嵌入式系统打下了坚实的一步。对于了解车辆座椅控制的自动化与智能化;了解用户通过智能手机与车载传感器之间的联动;了解车辆作为当今物联网中重要的一个节点都发挥了重要作用。通过车辆座椅控制系统实验实现对嵌入式系统原理课程的熟练掌握与对嵌入式系统原理知识的深化记忆。加强本组学生对嵌入式系统原理的更深层次的理解与运用。 南京信息工程大学 实验(实习)报告 实验(实习)名称 电机转动控制及中断实验 实验(实习)日期 2016.5 得分 指导教师 谢胜东 学院 计算机与软件 专业 计算机科学与技术 年级 2013 班次 3 姓名 叶正舟 学号 20131308072 实验名称 电机转动控制及中断实验 实验目的 (1)熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置 (2)编程实现 ARM系统的PWM 输出和I/O 输出,前者用于控制直流电机,后者用于控制步进电机。 (3)了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。 (4)掌握带有PWM 和I/O 的CPU 编程实现其相应功能的主要方法。实验环境 (1)ADS1.2开发环境(2)PC(3)串口线 实验内容及要求 学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM知识,掌握PWM 的生成方法,同时也要掌握I/O 的控制方法。 (1)编程实现ARM芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速 (2)编程实现ARM的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动,通过A/D 旋钮转角控制步进电机的转角。 (3)通过超级终端来控制直流电机与步进电机的切换。实验设计与实验步骤 (1)新建工程,将“电机转动控制实验”中的文件添加到工程(2)编写直流电机初始化数(MotorCtrl.c)(3)控制直流电机与步进电机 实验过程与分析 (1)通过把从串口中得到控制信息的代码修改成从zlg7289芯片中读取小键盘信息,从而利用试验台的小键盘来控制步进电机和直流电机的切换 (2)A/D转换可以把电信号转换成数字信号来控制电机的转速。for(;;) { loop: //if((rUTRSTAT0 & 0x1))//有输入,则返回 if(rPDATG&ZLG7289_KEY)//17键小键盘控制电机 { *Revdata=RdURXH0(); goto begin; } Delay(10);ADData=GetADresult(0); if(abs(lastADData-ADData)<20) goto loop;Delay(10);count=-(ADData-lastADData)*3; //(ADData-lastADData)*270/1024为ad旋钮转过的角度,360/512为步距角,//由于接了1/8减速器,两者之商再乘以8为步进电机相应转过的角度 if(count>=0) {//转角大于零 for(j=0;j { for(i=0;i<=7;i++) { SETEXIOBITMASK(stepdata[i], 0xf0); Delay(200); } } } lastADData=ADData; } } 实验结果总结 利用A/D转换器实现了对直流电机和步进电机的控制,利用实验设备上自带的小键盘实现了A/D转换器对两个电机控制的切换。心得体会 通过本次实验,熟悉了ARM自带的六路(三对)PWM,并对直流电机和步进电机的工作原理有了进一步的了解。 嵌入式系统设计基础 嵌入式系统设计基础 结题报告 学 生1: 学 生2: 学 生3: 组 长: 组长电话: 指导老师: 完成时间: 嵌入式系统设计基础 目录 目录....................................................................2 摘 要...................................................................3 一、课题概述...........................................................4 二、课题实施方案.......................................................4 2.1 方案说明........................................................4 2.1.1 LCD图像显示模块设计方案..................................4 2.1.2 触摸屏模块设计方案........................................5 2.1.3 音乐播放模块设计方案......................................5 2.1.4 键盘模块设计方案..........................................6 2.2 工程规范........................................................6 三、课题实施过程详述...................................................6 四、系统测试方法.......................................................8 五、结果分析...........................................................8 六、总结................................................................9 参考文献................................................................9 附录....................................................................9 嵌入式系统设计基础 摘 要 随着智能手机和平板电脑等便携式设备的兴起,ARM已经成为全球领先的半导体知识产权提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM技术具有性能高、成本低和能耗省的特点。本文旨在初步接触嵌入式ARM技术。我们使用了天嵌TQ2440开发板以及ADS1.2来进行相关实验,主要制作了一个带背景音乐、可以使用触摸屏和键盘进行前后照片切换的数码相框。通过这次实验,我们对ARM技术有了一个初步的认识和了解,同时也掌握了一些编程和调试技术。 关键词:嵌入式,LCD图像显示,触摸屏 Abstract With the development of the smartphone and tablet computer, ARM has already become a leading semiconductor intellectual property provider in global market.More than 95% of the smartphone and tablet computer use the ARM framework.ARM has the advantages in performance, cost and efficiency.This paper aim at having a rough contact with embedded ARM and we use TQ2440 and ADS1.2 to conduct relevant experiments.Generally, we have made a digital album which can be controlled by touch panel.Through this experiment, we have grown a general acknowledge of ARM technology and master some coding and debugging technology.Keywords:embedded system, LCD display, touchpanel 3 嵌入式系统设计基础 一、课题概述 本文展示了一个使用ARM技术制作而成的带有背景音乐并且可以通过触摸屏和键盘控制的数码相框。数码相框在当今市面上也有销售,其功能主要是放映照片,绝大部分能够通过无线或蓝牙与移动设备进行连接,以达到实时放映的效果。我们所制作的数码相框总体而言功能并不是很强大,但也符合数码相框的基本原理并且实现了基本功能。本课题的核心问题是如何实现触摸屏精确地点击、图像切换显示还有音乐播放功能。 二、课题实施方案 本课题的基本设计方案分为四个模块,LCD图像显示模块、触摸屏模块、音乐播放模块以及键盘模块。整体的设计流程为首先完成在TQ2440开发板液晶显示屏上显示出六张自定义图像;然后实现按键控制图像的切换;再加入对触摸屏的操作,使得能够使用触摸屏切换图像;最后加上PWM蜂鸣器播放音乐的功能。 2.1 方案说明 2.1.1 LCD图像显示模块设计方案 为了实现带有背景音乐并且能够使用触摸屏控制的数码相框,我们首先要能够在开发板的显示屏上显示用户自定义的照片。由于我们所使用的开发板配备的是4.3寸的显示屏,所以图片尺寸要设定为480*272才能完美适应屏幕大小。在程序代码中,显示图片的功能由Paing_Bmp定义,具体为Paint_Bmp(0, 0, 480, 272, TQ_LOGO),其中,480、272对应的是要显示的照片的尺寸,因为我们用的是4.3寸屏,所以设定为480、272;而TQ_LOGO是图片的名称,名称由用户自己定义,这里的TQ_LOGO对应的是开发板开机显示的第一张LOGO照片。照片的显示本质上是对屏幕上每一个像素点赋值的过程,不断赋值的一个过程其实就是实现了对LCD的每个像素点进行逐行扫描写入不同像素点对应图片的不同位置的颜色值的过程。 图 1.像素扫描原理 因此,只要将图片的每一个像素点的值写入程序,就能够实现照片显示的功能。这里我们使用了天嵌科技光盘附带的bmp2h程序,将一个BMP图片文件转换为带有每行像素值的C文件,然后将C文件中的代码复制到LCD显示程序代码下,即可实现照片显示功能。 另外,由于480*272照片文件容量较大,缺省的内存设置无法满足显示6张照片的功能,会导致显示花屏。针对这个问题,我们是在nand.c文件中修改RdNF2SDRAM()函数中的U32 size = 0x100000,我们改成U32 size = 0x800000,这样就满足了照片显示的内存需求。 嵌入式系统设计基础 2.1.2 触摸屏模块设计方案 四线电阻式触摸屏硬件工作原理按照工作原理和传输信息的介质不同,触摸屏分为电阻式、电容感应式、红外线式以及表面声波式。由于电阻式触摸屏具有工作面与外界完全隔离,受环境影响较小,具有不怕灰尘和水汽、稳定性高、不漂移等优点,特别适合工业现场使用。因此我们选择了四线电阻式触摸屏。 我们使用触摸屏进行相册的前进和后退,具体来说,就是触摸屏幕上半部分,就跳转到前一张照片;反之,触摸下半部分,就跳转到下一张照片。实现该功能的关键在于设置一个标志位来判断当前放映的是6张照片中的哪一张,当xdata>500时,判断为下半部分;xdata<500时,判断为上半部分,然后一旦触摸屏幕,在判断触摸的是哪一个部分后就会进行加一或减一,以此循环。具体实现就是在LCD代码的while(1)中,加入一段判断选择程序,其中xdata对应的是屏幕的竖轴,ydata对应横轴。 另外,由于触控比较灵敏,会出现轻轻按一下却切换了好几张照片的情况,为了解决这个问题,就需要加入一段中断以及判断按下和松开状态。 图 2.状态转换图 2.1.3 音乐播放模块设计方案 S3C2440A 有五个十六位计时器。计时器 0, 1, 2, 和3有 Pulse Width Modulation(PWM)功能.计时器4 只有一个内部计时器,没有外部输出管脚。定时器0 有一个死区发生器,这可以给大电流设备使用。 定时器0和1共用一个8位预分频器,而定时器2、3和4共用其他一个8位预分频器。每个定时器有一个时钟分频器,可以生成5种不同的信号(1 / 2,1 / 4,1/ 8,1 / 16,和TCLK)。每个定时器模块,接收从其自己的时钟分频器发出的信号,收到相应的8位预分频器的时钟的时钟信号的时候。8位预分频器是可编程的,并且可以根据存储在TCFG0和TCFG1寄存器中的装载值细分(确定)像素时钟PCLK。 当计时器时使能的时候,该计时器的计数缓冲寄存器(TCNTBn)初始化,同时装载初始值到向下计数器当中。计时器的比较缓冲寄存器(TCMPBn)初始化的时候,自动装载一个初始值,用来和向下计数器的值进行比较。这种双重缓冲寄存器的机构,TCNTBn和TCMPBn,使计时器可以在PWM频率和占空比改变的时候保持稳定的PWM输出。 每一个定时器都有自己的有机器时钟驱动的十六位向下计数器。当向下计数器到达零的时候,定时器中断请求产生并通知CPU,定时器操作已经完成。当定时器向下计数器达 5 嵌入式系统设计基础 零的时候,相应的TCNTBn将会自动为下一次操作装载相应的计数值。然而,当计时器被停止的时候,例如,当定时器控制寄存器TCONn的使能位被清零的时候,TCNBn的值就不会被重新装载进计数器。TCMPBn的值是用于控制脉宽调制(PWM)的。定时器控制当向下计数器的值等于compare的值时,输出电平逻辑改变。因此,compare寄存器的值决定了PWM的占空比。 我们要调整PWM 的占空比进行电机控制或者电源控制的时候,只需要在程序中不断修改rTCNTB0 的值就可以了;而如果我们要改变PWM 的频率,我们只要通过不断的修改rTCNTB0 的值就可以了(当然也可以通过修改rTCNTB0 =(PCLK>>7)/freq 中的freq 的值来间接实现修改rTCNTB0 的值)。 2.1.4 键盘模块设计方案 我们知道有时触摸屏会不太好用,比如手湿了或者戴手套的时候,这时有了按键功能,就能起到很好的替换效果。我们主要用按键功能实现照片的前后切换,其原理和之前触摸屏切换类似,这里不多撰述。 2.2 工程规范 在本次课题实施中我们就TQ2440开发板实际开发操作方面总结出规范如下:(1)不要着急写代码,首先要将设计思路、功能模块等规划完成,然后才能进行下一步的工作。这样做有助于实际操作过程中的条理性,并且可以使项目处于可控、可实现的状态。 (2)在编写代码的时候一定要添加上相应的注释,增加代码的可读性,方便自己以后的修改和别人的理解。 (3)硬件上,接线时一定要仔细。注意串口线连接的位置,因为这涉及到烧录程序时端口的选择。 (4)从直观上看问题。每次修改程序之后先录入开发板,从显示屏实际显示效果上看是否实现功能而不是纠结于程序是否修改正确。 三、课题实施过程详述 1、实现六张图像的键盘控制切换; 在keyscan.c的static void __irq Key_ISR(void)中加入以下代码: if(key == 0xff){flag3=0;Uart_Printf(“Interrupt occur...Key is released!n”);} else{ flag3++;if(flag3 == 8)flag3 = 2;if(flag3 == 1){ if(key == 2 && flag4<=6) {flag4++;if(flag4==7)flag4=1;} 嵌入式系统设计基础 else if(key == 1 && flag4<=6){flag4--;if(flag4==-1)flag4=6;} else if(key == 3){flag5=1;Main();}} Uart_Printf(“Interrupt occur...K%d is pressed!n”, key);ExitCritical(&r);} switch(flag4){ case 1:Paint_Bmp(0, 0, 480, 272, tu1_320240);break; case 2:Paint_Bmp(0, 0, 480, 272, tu2_320240);break; case 3:Paint_Bmp(0, 0, 480, 272, tu3_320240);break; case 4:Paint_Bmp(0, 0, 480, 272, tu4_320240);break; case 5:Paint_Bmp(0, 0, 480, 272, tu5_320240);break; case 6:Paint_Bmp(0, 0, 480, 272, tu6_320240);break; } 2、实现触摸屏控制图片切换功能; (1)在while(1)中来实现:通过使用对触摸屏进行触摸操作时返回的xdata 和ydata 的数值对我们要显示的图片进行控制选择,如下: while(1)//to check Pen-up state { if(rSUBSRCPND &(BIT_SUB_TC))//check if ADC is finished with interrupt bit { flag = 0;break;//if Stylus is up(1)state} flag++;if(flag == 8) flag = 2;if(flag == 1){ if(xdata>500 && flag1<=6) {flag1++;if(flag1==7)flag1=1;} else if(xdata<500 && flag1<=6) {flag1--;if(flag1==-1)flag1=6;} else flag1=0; switch(flag1){ case 1:Paint_Bmp(0, 0, 480, 272, tu1_320240);break; case 2:Paint_Bmp(0, 0, 480, 272, tu2_320240);break; case 3:Paint_Bmp(0, 0, 480, 272, tu3_320240);break; case 4:Paint_Bmp(0, 0, 480, 272, tu4_320240);break; case 5:Paint_Bmp(0, 0, 480, 272, tu5_320240);break; case 6:Paint_Bmp(0, 0, 480, 272, tu6_320240);break; }} } (2)编译修改好的程序生成所需要的bin文件,录入开发板并观测图像显示。 3、PWM蜂鸣器音乐播放功能。 这部分功能就是在原先功能基础上加入了蜂鸣器的播放功能。 嵌入式系统设计基础 四、系统测试方法 本文所使用的硬件环境为天嵌TQ2440,是由广州天嵌计算机科技有限公司所制造。软件环境为WINDOWS 10,带有2.40 GHz Core™ i5 处理器以及4GB RAM。编译环境为ARM Developer Suite(ADS)1.2版。 五、结果分析 由于无法体现触控功能和音乐播放功能,这里只展示了照片显示功能。数码相框显示的照片如下,从图片中可以看到照片显示功能十分完好: 嵌入式系统设计基础 六、总结 本文展现了我们制作的数码相框,虽然总的来讲功能比较简陋,但也是我们的一片心血。通过这次实验,我们对于ARM嵌入式开发有了一个初步的认识,也熟悉了整个开发过程。最为重要的是,这次的实验为我们未来的学习与工作打下了一个良好的基础,我们不仅体验了当今最为流行的嵌入式技术,更是懂得了嵌入式开发的思想核心。在这里,我们要感谢负责嵌入式实验相关工作的王建敏老师,以及教授嵌入式课程的韩军老师、薛雷老师以及陆小峰老师,他们为这门课付出了自己的心血,传授给我们无价的知识。总的来说,这次实验难度并不大,但学到的东西并不少,相信未来我们也许也将走上嵌入式开发的道路,为嵌入式领域贡献自己的一份力量。 参考文献 [1] 裸奔三部曲.广州天嵌计算机科技有限公司.2012:1-59 [2] TQ2440开发板使用手册.广州天嵌计算机科技有限公司.2012:271-298 附录 (1)触摸屏ADC 中断初始化的程序段 rADCDLY=50000; //Normal conversion mode delay about(1/3.6864M)*50000=13.56ms rADCCON=(1<<14)+(ADCPRS<<6);//ADCPRS En, ADCPRS Value Uart_Printf(“nTouch Screen testn”);rADCTSC=0xd3;//Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En pISR_ADC =(int)AdcTsAuto;rINTMSK=~BIT_ADC;//ADC Touch Screen Mask bit clear rINTSUBMSK=~(BIT_SUB_TC);(2)触摸屏中断程序断 void __irq AdcTsAuto(void){ U32 saveAdcdly;if(rADCDAT0&0x8000){ //Uart_Printf(“nStylus Up!n”);rADCTSC&=0xff;// Set stylus down interrupt bit 嵌入式系统设计基础 } //else //Uart_Printf(“nStylus Down!n”);rADCTSC=(1<<3)|(1<<2);//Pull-up disable, Seq.X,Y postion measure.saveAdcdly=rADCDLY;rADCDLY=40000; //Normal conversion mode delay about(1/50M)*40000=0.8ms rADCCON|=0x1; //start ADC while(rADCCON & 0x1); //check if Enable_start is low while(!(rADCCON & 0x8000)); //check if EC(End of Conversion)flag is high, This line is necessary!while(!(rSRCPND &(BIT_ADC)));//check if ADC is finished with interrupt bit xdata=(rADCDAT0&0x3ff);ydata=(rADCDAT1&0x3ff);//check Stylus Up Interrupt.rSUBSRCPND|=BIT_SUB_TC;ClearPending(BIT_ADC);rINTSUBMSK=~(BIT_SUB_TC);rINTMSK=~(BIT_ADC);rADCTSC =0xd3; //Waiting for interrupt rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.while(1) //to check Pen-up state { if(rSUBSRCPND &(BIT_SUB_TC))//check if ADC is finished with interrupt bit { //Uart_Printf(“Stylus Up Interrupt~!n”);break;//if Stylus is up(1)state } } Uart_Printf(“count=%03d XP=%04d, YP=%04dn”, count++, xdata, ydata);//X-position Conversion data rADCDLY=saveAdcdly;rADCTSC=rADCTSC&~(1<<8);// Detect stylus Down interrupt signal.rSUBSRCPND|=BIT_SUB_TC;rINTSUBMSK=~(BIT_SUB_TC);// Unmask sub interrupt(TC)ClearPending(BIT_ADC);}(3)PWM蜂鸣器音阶发生功能 while(1){ U16 freq =800; if((xdata>719 && ydata>800)){ Paint_Bmp(0,0,480,272,tu3_480272);freq=220;Buzzer_Freq_Set(freq);} 嵌入式系统设计基础 else if(xdata>526 && ydata>800){ Paint_Bmp(0,0,480,272,tu2_480272);freq=247;Buzzer_Freq_Set(freq);} else if(xdata>332 && ydata>800){ Paint_Bmp(0,0,480,272,tu1_480272);freq=262;Buzzer_Freq_Set(freq);} else if(xdata>719 && ydata<225){Paint_Bmp(0,0,480,272,tu6_480272);freq=294;Buzzer_Freq_Set(freq);} else if(xdata>526 && ydata<225){Paint_Bmp(0,0,480,272,tu5_480272);freq=330;Buzzer_Freq_Set(freq);} else if(xdata>332 && ydata<225){Paint_Bmp(0,0,480,272,tu4_480272);freq=349;Buzzer_Freq_Set(freq);} else if(xdata>719 && ydata>225&& ydata<800){freq=392;Buzzer_Freq_Set(freq);} else {freq=392;Buzzer_Freq_Set(freq);Buzzer_Stop();} Paint_Bmp1(-40, 70, 480, 272,4, tu1_480272);Paint_Bmp1(-40, 140, 480, 272,4, tu2_480272);Paint_Bmp1(-40, 210, 480, 272,4, tu3_480272);Paint_Bmp1(400, 70, 480, 272,4, tu4_480272);Paint_Bmp1(400, 140, 480, 272,4, tu5_480272);Paint_Bmp1(400, 210, 480, 272,4, tu6_480272);Delay(500);} } 2010-2011-1 计算机组成原理实验报告 课程名称 : 学院(系): 专 业 : 班 级 : _ 指导教师 : 学 号 : 姓 名 : _ ___ 计算机组成原理实验 计算机科学与技术学院 计算机科学与技术 _ 计科082 __ 宁爱华 2008311020 __ 通过本实验课程训练,我熟悉了典型计算机的基本结构、基本组成和基本功能,掌握了计算机主要组成部件工作原理的基本分析与设计方法,使我对典型计算机系统的分析、设计、开发与使用能力得到训练与提高,在同时学习计算机组成原理这门课程的同时,也加深了对本专业课程的学习理解程度。当然,也对计算机各主要组成部件相互间的有机联系有了较全面的理解;锻炼了实验技能、创新能力、科研能力及解决实际问题方面的能力。 总结了一下这学期的组成原理实验,使我对CPU的结构有了更深的认识,CPU(中央处理器)由运算器和控制器组成,运算器的功能是加工信息包括算术运算和逻辑运算。主要由算术逻辑单元ALU 和寄存器组成。控制器可以产生控制命令来控制全机操作,由微指令产生微命令来产生微程序。从微程序的设计及运行了解了数据通路控制方式,计算机数据通路的控制将由微程序控制器来完成,CPU 从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。 从运算器实验中.掌握了简单运算器的数据传送通路。验证带进位运算及进位锁存功能时,使我对带进位这个概念透彻的理解了,我记得当次实验并没有注意的一个细节,例如:做加法运算,首先向DR1、DR2 置数,然后使ALU-B=0,S3 S2 S1 S0 M 状态为1 0 0 1 0,此时数据总线上显示的数据为DR1 加DR2 加当前进位标志,这个结果是否产生进位,则要由进位标志灯来显示,若进位标志灯亮,表示无进位;反之,有进位。在移位运算器中,分清了带进位循环左移或右移与循环左移或右移的的概念,循环右移,会把最后1位放到第一位,所以呢,循环右移会改变操作数的符号,如果是不带进位,就会出现正数变负数的情况。如果带进位的话,就是把负数看作是多一位的正数,相当于溢出进位。 存储器实验中,通过查阅教材和相关资料,存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。本实验涉及到的是静态随机存取存储器RAM,与只读存储器相比,随机存取存储器最大的优点是存取方便、使用灵活,既能不破坏地读出所存信息,又能随时写入新的内容。它可以在任意时刻,对任意选中的存储单元进行信息的存入(写入)或取出(读出)操作。如遇停电,所存内容便全部丢失为其缺点。 在微控制器实验中,掌握了微程序的设计思想和组成原理,微程序控制的基本思想,就是仿照通常的解题程序的方法,把所有的控制命令信号汇集在一起编码成所谓的微指令,再由微指令组成微程序,存放在一个EPROM 里。系统运行时,一条又一条地读出这些微指令,产生执行部件所需要的各种控制信号,从而驱动执行部件进行所规定的操作。控制器通过一条条控制线向执行部件发出各种控制命令,我们把这些控制命令叫做微命令。而执行部件接受微命令所执行的操作叫做微操作。在系统的一个基本状态周期中,一组实现一定操作功能的微命令的组合,微程序是由若干条微指令组成的序列。在计算机中,一条机器指令的功能可由若干条指令组成的微程序来解释和执行。微程序控制器的结构。由控制存储器、微地址寄存器、微命令寄存器和地址转移逻辑几部分组成。微地址寄存器和微命令寄存器两者的总长度即为一条微指令的长度,二者合在一起称为微指令寄存器。在模型机实行的实验中,了解到部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本次实验将能在微程序控制下自动产生各部件单元控制信号,实现特定指令的功能。这里,计算机数据通路的控制将由微程序控制器来完成,CPU 从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。还有控制器就是专用于完成此项工作的,它负责协调并控制计算机个部件执行程序的指令序列,其基本功能是取指令,分析指令和执行指令。在做本实验之前,以为PC只有计数功能,通过本实验,还了解到PC存放现行指令的地址,IR存放现行指令。通过本程序的指令流水,不禁感叹如此复杂的指令程序竟然按照顺序一部一部的进行下去了。 通过这次课程,我主要有以下几点收获:体会到了学习和研究中,团队协作的优势,如果没有和同学一起讨论交流,可能大家都很难比较快速和透彻地理解实验中的原理 ;感受到提出猜想、与大家讨论并通过实验证实自己猜想的快乐,并且能够寓教于乐;巩固了之前所学的组成原理的知识,通过这次课程中的讨论和实践,我更加透彻地了解了计算机主要组成部件工作原理。通过这个学期的学习,我了解了更多有关计算机组成原理实验方面的知识,虽然我知道自己还有很多欠缺,但是我相信通过自己努力肯定会学好这些知识的,无论多困难,都要自己好好学,什么都会好的。 在老师的帮助下,我知道了更深一层的计算机的内部和外部结构和它的深层知识,它是我们以前学的知识中最接近计算机的一门学科,所以它是基础也是重点,更是我们对计算机从软件到硬件方向上的最佳转变机会,我在学期初也决定要好好学习它。看着周围同学对组成原理实验的热情,我自己也深受鼓舞,所以在思想上和行动上,我都要求自己去付出努力和汗水。在每次实验课之前都会预习,还会根据教材来看相关的知识点。 在学习组成原理实验时有很多都不知道从何下手。当我通过自己查资料,在老师的讲解和自己看书下,终于理解了这些理论知识,在我们平时的学习中,不仅仅需要付出而且也需要动力还有自己的抑制力,每个人都是会懒惰的,所以要养成勤奋的习惯,好好把握自己,不断的去学习,不断的要求进步。 组成原理这门课程作为计算机专业考研统考课程是非常重要的,而本实验就是本课程的辅导课程,也是至关重要的,这门功课真的学到了很多东西,还有老师对我们的谆谆教诲,我会一直记忆在心。最后谢谢老师对我的指导和帮助,才能够取得进步! 化工原理实验总结报告 时光匆匆流逝,转眼间,化工原理实验要结课了,两个学期共做了六个实验,每个实验都让我收益颇多,不仅加深了对化工原理课程理论知识的理解,还熟悉了实验流程、步骤,了解了一些实际操作中的问题。 在学习化工原理实验前,老师就告诉我们了它的的重要性,理论知识是离不开实验操作的,而实验操作又可以加深对理论知识的理解。做好化工原理实验对加深对化工原理这门课程的理解有着重要意义。 经过两年的实验经历,我了解到了做好化工原理实验的要点。首先就是在实验前进行一定的预习,了解实验原理、装置、步骤及需要注意的问题,由于有时候实验书上及上机模拟时的装置与实际实验室的装置不同,需要多注意,同时对无法解决的疑问等待老师的解答; 然后就是在实验时,要认真听老师的讲解,老师的讲解往往很详细,包含了原理,详细步骤,注意事项以及一些实验与实际生产的不同,对我们很有帮助。在实验的操作过程中,要有团队合作的意识,按照步骤,注意保护装置,认真记录数据,遇到无法解决的问题及时向老师或同学求助; 还有就是在认真完成数据处理,在数据处理是往往能让我们整体把握实验,加深对实验的理解,而且在数据处理课上老师会建议大家一些处理方法,以及教导大家一些需要用到的软件,对实验报告的完成及以后化工数据的处理很有益处。 对化工原理实验课程的意见: 希望老师在讲解时更为系统,适当压缩时间,或分段去讲。有的时候,老师的时间过长,以至于听到最后反而有些糊涂,最开始或中间的一些细节记忆模糊,希望老师以后可以注意。 希望实验的上机课中数据处理课的课时能够有所调整。这样处理数据的时候做的工作也会相对全面系统。第二篇:嵌入式系统实验
第三篇:嵌入式系统设计基础总结报告
第四篇:组成原理实验总结报告
第五篇:化工原理实验总结报告