当前位置:文档之家› 嵌入式系统原理与设计实验报告

嵌入式系统原理与设计实验报告

嵌入式系统原理与设计实验报告
嵌入式系统原理与设计实验报告

嵌入式系统实验报告

指导教师:

学科专业:

班级:

学号:

姓名:

2014年6月

前言

从20世纪七十年代单片机的出现到各式各样的嵌入式微处理器,微控制器的大规模应用,嵌入式系统已经有了近30年的发展历史,并在全世界各行业得到广泛应用。嵌入式系统产品的研制和应用已经成为我国信息化带动工业化、工业化促进信息化发展的新的国民经济增长点。经过几十年的发展,嵌入式系统已经在很大程度改变了人们的生活、工作和娱乐方式,而且这些改变还在加速。嵌入式系统具有无数的种类,每类都具有自己独特的个性。例如,MP3、数码相机与打印机就有很大的不同。汽车中更是具有多个嵌入式系统,使汽车更轻快、更干净、更容易驾驶,机顶盒、高清电视、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等,都是典型的嵌入式系统。事实上,几乎所有带有一点“智能”的家电(全自动洗衣机、电脑电饭煲…)都是嵌入式系统。嵌入式系统广泛的适应能力和多样性,使得视听、工作场所甚至健身设备中到处都有嵌入式系统。

高端的嵌入式系统和工业软件的发展,实际上与我们对该行业最先进的科学技术前沿的掌握有关,换言之,与我国该行业的科学技术水平有关。学习和研究嵌入式系统,具有重大意义。

这学期的嵌入式系统的学习过程中我们在2410RP这一实验开发平台上进行了诸多嵌入式的基础实验。在本报告中,将把其中两个具有代表性的实验的原理、内容、结果以及驱动和测试程序写出来。

目录

实验一数码管显示 (1)

1.1 实验目的 (1)

1.2 实验内容 (1)

1.3 实验原理 (1)

1.3.1 LED的发光原理 (1)

1.3.2 八段LED显示器 (1)

1.3.3 芯片zlg7289A的介绍 (2)

1.3.4 数码管的连接电路 (3)

1.4 实验步骤 (3)

1.5 实验源代码解释与说明 (4)

1.6 总结 (11)

实验二LED点阵驱动实验 (12)

2.1 实验目的 (12)

2.2 实验内容 (12)

2.3 实验原理 (12)

2.3.1 8X8点阵数码管发光原理 (12)

2.3.2 数码管的连接电路 (12)

2.3.3 I/O接口 (13)

2.4 实验步骤 (13)

2.5 实验源代码解释与说明 (14)

2.6 实验结果 (19)

2.7 总结 (19)

实验一数码管显示

1.1 实验目的

学习串并转换的相关知识,并编写驱动程序。

1.2 实验内容

1)了解数码管显示的工作原理;

2)掌握数码管驱动的编写及测试过程;

3)对zlg7289A的驱动程序进行编写;

4)驱动数码管并显示个人学号。

1.3 实验原理

1.3.1 LED的发光原理

LED(Light Emitting Diode),即发光二极管。是一种半导体固体发光器件。它是利用固体半导体置于一个有引线的架子上,然后四周用环氧树脂密封,起到保护内部芯线的作用,所以LED的抗震性能好。

发光二极管的核心部分是由p型半导体和n 型半导体组成的晶片,如图所示,在p型半导体和n型半导体之间有一个过渡层,称为p-n结。在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能。PN结加反向电压,少数载流子难以注入,故不发光。这种利用注入式电致发光原理制作的二极管叫发光二极管,通称LED。当它处于正向工作状态时(即两端加上正向电压),电流从LED阳极流向阴极时,半导体晶体就发出从紫外到红外不同颜色的光线,光的强弱与电流有关。

图1-1 LED发光原理图

1.3.2 八段LED显示器

八段LED显示器由8个发光二极管组成,如图1-2、图1-3所示。基中7个

长条形的发光管排列成“日”字形,另一个贺点形的发光管在显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED显示器有两种不同的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED 显示器。

共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。8个笔划段hgfedcba 对应于一个字节(8位)的D7 D6 D5 D4 D3 D2 D1 D0,于是用8位二进制码就可以表示欲显示字符的字形代码。例如,对于共阴LED显示器,当共阴极接地(为零电平),而阳极hgfedcba各段为0111011时,显示器显示"P"字符,即对于共阴极LED 显示器,“P”字符的字形码是73H。如果是共阳LED 显示器,共阳极接高电平,显示“P”字符的字形代码应为10001100(8CH)。这里必须注意的是:很多产品为方便接线,常不按规则的方法去对应字段与位的关系,这时字形码就必须根据接线来自行设计了。

图1-2 LED数码管组成图

图1-3 LED数码管原理图

1.3.3 芯片zlg7289A的介绍

zlg7289A是一片具有串行接口的可同时驱动8位共阴式数码管或64只独立LED的智能显示驱动芯片该芯片同时还可连接多达64 键的键盘矩阵单片即可完成LED显示﹑键盘接口的全部功能。zlg7289A内部含有译码器可直接接受BCD码或16进制码并同时具有2 种译码方式参看后文此外还具有多种控制指令如消隐﹑闪烁﹑左移﹑右移﹑段寻址等zlg7289A具有片选信号可方便地实现多于8位的显示或多于64键的键盘接口。

芯片zlg7289A的典型应用:仪器仪表、工业控制器、条形显示器、控制面

板。

芯片zlg7289A的特点:

1)串行接口无需外围元件可直接驱动LED;

2)各位独立控制译码/不译码及消隐和闪烁属性;

3))循环左移/ 循环右移指令;

4)具有段寻址指令方便控制独立LED;

5)64键键盘控制器内含去抖动电路。

1.3.4 数码管的连接电路

图1-4 数码管连接电路

1.4 实验步骤

1)连接号宿主PC机与一台S3C2410-RP目标板;

2)编写数码管驱动程序spi_led.c文件;

3)启动系统终端设置S3C2410-RP目标板的地址;

4)将宿主PC机的根目录挂载到S3C2410-RP目标板的mnt目录下;

5)加载驱动程序;

6)执行并测试程序。

1.5 实验源代码解释与说明

A. 头文件keypad.h

#ifndef __KEYPAD_H__

#define __KEYPAD_H__

//Keypad 扫描码

#define KEYPADNUMLK 0x33

#define KEYPADDIV 0x34

#define KEYPADMUL 0x35

#define KEYPADSUB 0x3d

#define KEYPADADD 0x2e

#define KEYPADENTER 0x1e

#define KEYPADDOT 0x15 //DEL

#define KEYPAD0 0x14 //INS

#define KEYPAD1 0x1b //END

#define KEYPAD2 0x1c //DOWN

#define KEYPAD3 0x1d //PDN

#define KEYPAD4 0x23 //LEFT

#define KEYPAD5 0x24

#define KEYPAD6 0x25 //RIGHT

#define KEYPAD7 0x2b //HOME

#define KEYPAD8 0x2c //UP

#define KEYPAD9 0x2d //PUP

#endif

头文件定义了嵌入式开发板上输入键盘各个按键的逻辑地址。

B. 驱动程序源文件spi_led.c

#include //config.h内核配置头文件

#include //kernel.h定义了经常用到的函数原型及宏定义

#include //module.h定义了内核模块相关的函数、变量及宏#include //sched.h为调度程序头文件,定义了任务结构#include //interrupt.h中包含了与操作系统中断相关的大部分宏及struct结构的定义

#include

#include //init.h中定义了驱动的初始化和退出相关的函数

#include

#include

#include //version.h里定义了Linux内核的版本,用于版本检查

#include //I/O头文件,定义对I/O端口操作的函数

#include

#include //访问系统硬件的头文件

//------------------------------------------------------------------------------

#include

#include //自旋锁,防止多处理器并发

#include

#include

#include

#include

#include

#include

#include

#include //miscdevice结构体成员变量设备

#include

#include

#include

#include

#include

#include

#include

#include //包含copy_to_user、copy_from_user等内核访问用户进程内存地址的函数定义

#include //系统头文件,定义了设置或修改描述符/中断门等的嵌入式汇编宏

//------------------------------------------------------------------------------

#define HR_DEBUG 1

//------------------------------------------------------------------------------

#define IRQ_spi_led_INT IRQ_EINT4

#define GPIO_SimpleINT_EINT4 (GPIO_MODE_ALT0 | GPIO_PULLUP_EN | GPIO_F4)

#define ONEBIT 0x1

#define KEYPADCSDIS (GPGDAT |=(ONEBIT << 3))

#define KEYPADCSEN (GPGDAT &=~(ONEBIT << 3))

#define KEYPADDIRMO (GPBDAT &=~(ONEBIT << 0))

#define KEYPADDIRMI (GPBDAT |=(ONEBIT << 0))

#define spi_led_MAJOR 104 //定义led_ary_MAJOR设备的主设备号devfs_handle_t spi_led_handle; //系统支持devfs的数据结构

int spi_led_temp_count=0; //定义的系统全局变量,防止文件被多重打开static int DELAY_TIME=100; //时间延迟为100

int putcToKBCTL(u8 c)

{

u32 i;

KEYPADCSEN;

KEYPADDIRMO;

udelay(60);

while((SPSTA1 & ONEBIT)==0); // wait while busy

SPTDAT1 = c; // write left justified data

while((SPSTA1 & ONEBIT)==0); // wait while busy

KEYPADCSDIS;

i = SPRDAT1;

return(i);

} //功能概要:将所给数据写入指定的寄存器中

int spi_ledInit()

{

int t;

char dummy = (char)0xff;

printk("GPGCON=%x\n",GPGCON);

GPGCON &= ~((0x3<<6)|(0x3<10)|(0x3<<12)|(0x3<<14));

GPGCON |= ((0x1<<6)|(0x3<10)|(0x3<<12)|(0x3<<14));

printk("GPGCON=%x\n",GPGCON);

KEYPADCSDIS; // 设置为高电平

// setup Dir signal (KEYBOARD) CPU->7289

GPBCON &= ~(0x3 << 0); // 清除GPB0端口数据

GPBCON |= (ONEBIT << 0); //设置端口GPB0用于_PWR_OK信号输出// rGPDDAT &=~(ONEBIT << 0); // 将_PWR_OK t置0 KEYPADDIRMO; //设置SPI(串行外设接口)寄存器

// 中断模式,可用分频,主模式,高电平时钟,形式B,正常模式

//rSPCON1=(ONEBIT<<5)|(ONEBIT<<4)|(ONEBIT<<3)|(0x0<<2)|(ONEBIT<<1);

// 查询模式,可用分频,主模式,高电平时钟,形式A,正常模式SPCON1 = (0<<5)|(ONEBIT<<4)|(ONEBIT<<3)|(0x0<<2)|(0<<1);

/* 开发者必须根据PCLK时钟的变化正确地调节分频器的值*/

SPPRE1 = 255;

/* 99.121K = 203M/4/2/(255+1) PCLK=50.75Mhz

FCLK=203Mhz SPICLK=99.121Khz*/

putcToKBCTL(0xbf); //传送初始化指令

printk("Key Pad Init complete:\n"); //显示键盘初始化成功

putcToKBCTL(0xc8); //第一个数码管的地址为0xc8 putcToKBCTL(0x01); //设置第一个数码管显示的数值为1 KEYPADCSDIS;

putcToKBCTL(0xc9); //第二个数码管的地址为0xc9 putcToKBCTL(0x02); //设置第二个数码管显示的数值为2 KEYPADCSDIS;

putcToKBCTL(0xca); //第三个数码管的地址为0xca putcToKBCTL(0x09); //设置第三个数码管显示的数值为9 KEYPADCSDIS;

putcToKBCTL(0xcb); //第三个数码管的地址为0xcb

putcToKBCTL(0x00); //设置第三个数码管显示的数值为0 KEYPADCSDIS;

return(1);

} //函数实现LED数码管的初始化,返回值为1时,则完成系统初始化

u8 readKBValue(void)

{

unsigned char i;

KEYPADCSEN;

KEYPADDIRMO;

udelay(60);

while((SPSTA1 & ONEBIT)==0); // wait while busy

SPTDAT1 = 0x15; // 传送读取键值的命令

while((SPSTA1 & ONEBIT)==0); // wait while busy

udelay(30);//delay 30us

KEYPADDIRMI;

SPTDAT1 = 0xff; // 传送读取键值的命令

while((SPSTA1 & ONEBIT)==0); // wait while busy

i = SPRDAT1;

// printk("%x\n",i);

KEYPADCSDIS;

KEYPADDIRMO;

return(i);

} //函数实现的主要功能为读取键盘输入的值。

ssize_t spi_led_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)

{

return count;

}

//函数返回:读取数据的长度count。

//功能概要:对字符性设备进行读操作

/*=========== SimpleD Write =======================*/

ssize_t spi_led_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops) {

printk("s3c2410: device file-write operation!\n");

return count;

}

//函数返回:写入数据的长度count。

//功能概要:对字符性设备进行写入操作

/*=========== SimpleD Ioctl =======================*/

ssize_t spi_led_ioctl (struct inode * inode ,struct file * file,

unsigned int cmd, long data)

{

printk("s3c2410: device ioctl operation!\n");

} //函数可重新定义用来I/O口的其他控制操作

/*============ SimpleD device open ==============*/

ssize_t spi_led_open (struct inode * inode ,struct file * file)

{

return 0;

} //当用户态调用函数时,对应内核态次函数被调用

/*============ SimpleD device close =============*/

ssize_t spi_led_release (struct inode * inode ,struct file * file)

{

return 0;

}//定义内核态release函数,当用户态调用close函数时,release函数被调用struct file_operations spi_led_ops ={

open: spi_led_open,

read: spi_led_read,

write: spi_led_write,

ioctl: spi_led_ioctl,

release: spi_led_release,

};

//结构体file_operations在头文件linux/fs.h中定义,用来存储驱动内核模块提供的对设备进行各种操作的函数的指针

static void IRQ_spi_led_interrupt(int nr, void *devid, struct pt_regs *regs)

{

u8 ui8ScanCode;

ui8ScanCode=readKBValue();

//HR_del_pre_scancode(ui8ScanCode);

} //定义静态函数IRQ_spi_led_interrupt,请求中断

static int __init HW_spi_led_init(void)

{

int ret = -ENODEV;

int delay ;

set_external_irq(IRQ_spi_led_INT,EXT_FALLING_EDGE,

GPIO_PULLUP_EN);

set_gpio_ctrl(GPIO_SimpleINT_EINT4);

ret = request_irq(IRQ_spi_led_INT, IRQ_spi_led_interrupt, SA_INTERRUPT,

"spi_led", NULL);

if (ret) {

printk(KERN_INFO "request SimpleINT IRQ failed (%d)\n", IRQ_spi_led_INT);

return ret;

}

ret = devfs_register_chrdev(spi_led_MAJOR, "spi_led", &spi_led_ops);

if( ret < 0 ){

printk (" s3c2410: init_module failed with %d\n", ret);

return ret;

}

else

{

printk(KERN_INFO" S3c2410 spi_led register success!!!\n");

;

}

spi_led_handle = devfs_register( NULL, "spi_led", DEVFS_FL_DEFAULT,

spi_led_MAJOR, 0, S_IFCHR, &spi_led_ops, NULL);

//-------------------------------------------------------------------

spi_ledInit();

//-------------------------------------------------------------------

return ret;

} //用于驱动程序进行硬件设备初始化

int __init s3c2410_spi_led_init(void) {

int ret = -ENODEV;

ret = HW_spi_led_init();

if (ret)

return ret;

return 0;

} //模块初始化,程序由此开始执行,此函数被module_init()调用

int init_module()

{

s3c2410_spi_led_init();

} //此函数在insmod加载此模块驱动的时候自动调用。负责进行设备驱动程序初始化工作.init_module 返回0以表示初始化成功。返回负数表示失败。

void cleanup_module()

{

devfs_unregister_chrdev( spi_led_MAJOR, "spi_led" );

devfs_unregister( spi_led_handle );

free_irq(IRQ_spi_led_INT, NULL);

} // 此函数在卸载此模块驱动时调用。负责进行设备驱动程序的清除工作

1.6 总结

通过本次实验,我学习到一些Linux系统常用的操作命令,了解了LED数码管工作的原理。同时,对嵌入式系统有了更明确的了解与认识。通过实验中的实际操作,也体验了基于嵌入式开发的基本流程。在老师的指导下,完成了对LED数码管的显示控制,显示得到了自己学号的后四位1290。

实验二LED点阵驱动实验

2.1 实验目的

编写一个针对总线操作的硬件驱动程序。

2.2 实验内容

1)了解LED点阵显数码管示的工作原理;

2)掌握LED点阵驱动的编写及测试;

3)编写一个针对硬件LED点阵的驱动程序并测试;

4)驱动LED点阵并显示个人姓名。

2.3 实验原理

2.3.1 8X8点阵数码管发光原理

从图2-1中可以看出来,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图2-1所示,对应的一列为一根竖柱,或者对应的一列为一根横柱,因此实现柱形的亮法如下所述:

图2-1 LED点阵等效电路图

2.3.2 数码管的连接电路

系统电路如图2-2所示。显示部分用的是一个8X8发光二极管点阵,我们常见的用于发布消息、显示汉字的点阵式LED显示屏通常由若干块LED点阵显示模块组成,8X8显示点阵模块,每块有64个独立的发光二极管,为了减少引脚且便于封装,各种LED显示点阵模块都采用阵列形式排布,即在行列线的交点处接有显示LED。(因此,LED 点阵显示模块的显示驱动只能采用动态驱动方

式,每次最多只能点亮一行LED(共阳形式LED显示点阵模块)或一列LED (共阴形式LED显示点阵模块)。如图2-2所示的显示驱动原理图中,点阵为共阴,由总线锁存芯片74573为点阵显示模块提供列驱动电流,8个行信号则由集电极开路门驱动器7407控制,行线和列线都挂在总线上,微处理器可以通过总线操作来完成对每一个LED点阵显示模块内每个LED显示点的亮、暗控制。

图2-2 LED点阵硬件连接电路

2.3.3 I/O接口

在本开发板上,整个LED显示模块是作为一个I/O进行控制的。如电路原理图2-2所示,DATA[0..7]、DATA[8..15]分别对应系统数据线的低16位,LED_LOCK信号是由系统总线的写信号和地址信号经简单的逻辑组合而得,在板载的CPLD内完成,控制该显示模块的I/O地址为0x08000000。

2.4 实验步骤

1)连接号宿主PC机与一台S3C2410-RP目标板;

2)编写LED点阵驱动程序;

3)编写LED点阵显示测试程序test.c,并编译;

4)启动Linux系统终端并设置S3C2410-RP目标板的地址;

5)将宿主PC机的根目录挂载到S3C2410-RP目标板的mnt目录下;

6)加载LED点阵驱动程序;

7)执行并测试程序。

2.5 实验源代码解释与说明

A.驱动程序源文件led_ary.c

#include //config.h为内核配置头文件,文件里面指向另一个由make menuconfig自动生成的文件autoconf.h

#include //kernel.h定义了经常用到的函数原型及宏定义

#include //module.h模块驱动程序的头文件,定义了内核模块相关的函数、变量及宏

#include //sched.h为调度程序头文件,定义了任务结构

#include //interrupt.h中包含了与操作系统中断相关的大部分宏及struct结构的定义

#include

#include //init.h中定义了驱动的初始化和退出相关的函数

#include /* for udelay */

#include

#include //定义了Linux 内核的版本,用于版本检查

#include //I/O头文件,定义对I/O端口操作的函数

#include

#include //访问系统硬件用的头文件

#include

#define led_ary_MAJOR 102 //定义了led_ary_MAJOR设备的主设备号为102 #define VERSION "2410RP-led_ary-V1.00-070820"

unsigned long ioremap_addr;

void showversion(void)

{printk("*********************************************\n");

printk("\t %s \t\n", VERSION);

printk("*********************************************\n\n");

} //函数用于显示该设备的版本型号

devfs_handle_t dev_handle; //系统支持devfs的数据结构,注册handle到存储设备上。

int led_ary_temp_count=0; //定义的系统变量,防止文件被多重打开。ssize_t led_ary_read (struct file * file ,char * buf, size_t count, loff_t * f_ops) {char tmp[1];

printk("s3c2410: device file-read operation!\n");

tmp[0]=inb(ioremap_addr);

copy_to_user(buf,tmp,1);

return count;

} //函数实现对字符型设备进行读取操作

ssize_t led_ary_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops) {outw(count,ioremap_addr);

printk("s3c2410: device write operation!\n");

return count;

} //函数实现对字符性设备进行写操作

//上述两个函数实现了用户空间和内核空间的数据交换,而且还可以检查用户空间指针的有效性

//ioctl()函数,可实现读写之外的控制。

ssize_t led_ary_ioctl (struct inode * inode ,struct file * file,

unsigned int cmd, long data)

{printk("s3c2410: device ioctl operation!\n");

} //函数可重新定义用于实现I/O口的其他控制操作

ssize_t led_ary_open (struct inode * inode ,struct file * file)

{return 0;

} //当用户态调用open函数时,对应内核态次函数被调用

ssize_t led_ary_release (struct inode * inode ,struct file * file)

{return 0;

} //当用户态调用close函数时,此release函数被调用。

struct file_operations led_ary_ops ={

open: led_ary_open,

read: led_ary_read,

write: led_ary_write,

ioctl: led_ary_ioctl,

release: led_ary_release,

}; //结构体file_operations在头文件linux/fs.h中定义,用来存储驱动内核模块提供的对设备进行各种操作的函数的指针,指出设备驱动程序所提供的入口点位置

static int __init HW_led_ary_init(void)

{ int ret = -ENODEV;

showversion();

ret = devfs_register_chrdev(led_ary_MAJOR, "led_ary", &led_ary_ops); /*字符设备led_ary进行注册*/

if( ret < 0 ){

printk (" s3c2410: init_module failed with %d\n", ret);

return ret;

}

else

{printk(KERN_INFO" S3c2410 led_ary register success!!!\n");

;

}

dev_handle = devfs_register( NULL, "led_ary", DEVFS_FL_DEFAULT,

led_ary_MAJOR, 0, S_IFCHR, &led_ary_ops, NULL);/*注册devfs 设备*/

printk("GPACON=%x\n",GPACON);

printk("BWSCON=%x\n",BWSCON);

ioremap_addr=ioremap(0x18000002,0x0f);/* 将一个IO地址空间映射到内核的虚拟地址空间上去*/

outw(0x00ff,ioremap_addr);/*从I/O读取数据*/

return ret;

} //函数用于驱动程序进行硬件设备初始化

int __init s3c2410_led_ary_init(void) {

int ret = -ENODEV;

ret = HW_led_ary_init();

if (ret)

return ret;

return 0;

} //模块初始化,程序由此开始执行,此函数被module_init()调用。

int init_module()

{

s3c2410_led_ary_init();

} //insmod在加载此模块的时候自动调用该函数,负责进行设备驱动程序初始化工作.init_module返回0以表示初始化成功。返回负数表示失败。

void cleanup_module()

{devfs_unregister_chrdev( led_ary_MAJOR, "led_ary" );/*字符设备解除注册*/ devfs_unregister( dev_handle );

} //在模块被卸载时调用该函数。负责进行设备驱动程序的清除工作。

B. LED点阵显示设置程序文件test.c:

include //标准I/O库

#include

#include//文件控制,用于文件及其描述符的操作控制常数符号的定义#include //unix类系统定义符号常量的头文件

#include //该头文件定义了实用程序库函数

#include //基本系统数据类型头文件

#include //文件状态

int main() //主程序入口

北京科技大学 嵌入式课程设计报告

《嵌入式控制系统》课程设计报告 学院 专业班级 姓名 学号 指导教师 _

目录 摘要 (4)

Abstract (4) 引言 (5) 带中断LED数码管驱动程序设计 (6) 1.设计内容 (6) 1.1 基本功能 (6) 1.2 扩展功能 (6) 1.3创新功能 (6) 2.实验设备 (6) 3.设计功能块说明 (6) 4.设计原理 (7) 4.1 LED发光原理 (7) 4.2 八位LED显示器 (8) 5. 实验步骤 (8) 5.1 驱动程序加载 (8) 5.2 添加控件 (8) 5.3基本功能的实现 (9) 5.4 使用指南 (10) 6. 实验结果 (10) 6.1 基本功能实现结果 (10) 6.2 LED数码管清零功能实现结果 (11) 6.3 中断计数功能实现结果 (12) 6.4 频率设置功能实现结果 (13) 7. 心得体会 (14) 附录 (16)

摘要 通过嵌入式控制系统课程的学习并结合本次课程设计,了解嵌入式系统的开发方法和流程,熟悉Intel XScale硬件平台及其应用处理机的使用方法,熟悉Windows CE嵌入式系统的基本原理、概念。能针对Intel XScale硬件平台、应用需求自行定制、优化WinCE操作系统,并独立编写可在Intel XScale嵌入式设备上运行的应用程序。 本课程设计主要实现了LED数码管的驱动程序,中断计数功能、LED显示清零功能、LED 数字显示频率设置的功能。 关键字:WINCE 中断数码管驱动 Abstract Learning Embedded Control Systems and combining the curriculum design can help us understand the Embedded Control Sy stems’ development methods and processes, and be familiar with Intel XScale Hardware platform and its usage. Know well the basic principles and concepts about WINCE. Design and optimize Windows Embedded Compact and compose Application software program that can operate on the Intel XScale Hardware platform. The main achievement of the curriculum design are drivers for LED, Interrupt Count, clean the results of the LED and set up the display frequency of the LED. Key words: WINCE Interrupt Digital Driving

食品工程原理实验报告

姓名:陈蔚婷 学号:1363115 班级:13级食安1班 实验一:流体流动阻力的测定 、实验目的 1 ?掌握测定流体流经直管、管件和阀门时阻力损失的一般实验方法。 2?测定直管摩擦系数 入与雷诺准数Re 的关系,验证在一般湍流区内 入与Re 的关系曲线。 3?测定流体流经管件、阀门时的局部阻力系数 。 4?学会倒U 形压差计和涡轮流量计的使用方法。 5?识辨组成管路的各种管件、阀门,并了解其作用。 、基本原理 流体通过由直管、管件(如三通和弯头等)和阀门等组成的管路系统时,由于粘性剪应力和涡流 应力的存在,要损失一定的机械能。流体流经直管时所造成机械能损失称为直管阻力损失。流体通过 管件、阀门时因流体运动方向和速度大小改变所引起的机械能损失称为局部阻力损失。 1 ?直管阻力摩擦系数入的测定 流体在水平等径直管中稳定流动时,阻力损失为: P f P 1 P 2 l U 2 W f d 2 即, 2d p f l u (1) (2) 式中:入一直管阻力摩擦系数,无因次; d —直管内径,m ; P f —流体流经I 米直管的压力降,Pa ; w f —单位质量流体流经I 米直管的机械能损失,J/kg ; p —流体密度,kg/m 3 ; l —直管长度,m ; u —流体在管内流动的平均流速, m/s 。

式中:Re —雷诺准数,无因次; 卩一流体粘度,kg/(m s )。 湍流时入是雷诺准数Re 和相对粗糙度(& /d 的函数,须由实验确定。 由式(2)可知,欲测定 入需确定I 、d ,测定 p f 、u 、p □等参数。I 、d 为装置参数(装置 参数表格中给出), P □通过测定流体温度,再查有关手册而得, u 通过测定流体流量,再由管径 计算得到。 2 ?局部阻力系数 的测定 局部阻力损失通常有两种表示方法,即当量长度法和阻力系数法。 (1)当量长度法 流体流过某管件或阀门时造成的机械能损失看作与某一长度为 l e 的同直径的管道所产生的机械 (2)阻力系数法 流体通过某一管件或阀门时的机械能损失表示为流体在小管径内流动时平均动能的某一倍数, 局部阻力的这种计算方法,称为阻力系数法。即: ,P f u 2 w' f 故 式中: 一局部阻力系数,无因次; P f —局部阻力压强降,Pa ;(本装置中,所测得的压降应扣除两测压口间直管段的压降, 直管段的压降由直管阻力实验结果求取。) p —流体密度,kg/m 3 ; 滞流(层流) 时, 64 Re Re du (3) (4) 能损失相当,此折合的管道长度称为当量长度,用符号 l e 表示。这样,就可以用直管阻力的公式来计 算局部阻力损失,而且在管路计算时可将管路中的直管长度与管件、 则流体在管路中流动时的总机械能损失 W f 为: 阀门的当量长度合并在一起计算, l e W f (8) (9) 2 P f

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科0901 学号: 0909090310

指导老师:宋虹

目录 课程设计内容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------6 文件系统的层次结构和功能模块 ---------------------6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录-------------------------------------------------- 12

课程设计内容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

集成电路设计实验报告

集成电路设计 实验报告 时间:2011年12月

实验一原理图设计 一、实验目的 1.学会使用Unix操作系统 2.学会使用CADENCE的SCHEMA TIC COMPOSOR软件 二:实验内容 使用schematic软件,设计出D触发器,设置好参数。 二、实验步骤 1、在桌面上点击Xstart图标 2、在User name:一栏中填入用户名,在Host:中填入IP地址,在Password:一栏中填入 用户密码,在protocol:中选择telnet类型 3、点击菜单上的Run!,即可进入该用户unix界面 4、系统中用户名为“test9”,密码为test123456 5、在命令行中(提示符后,如:test22>)键入以下命令 icfb&↙(回车键),其中& 表示后台工作,调出Cadence软件。 出现的主窗口所示: 6、建立库(library):窗口分Library和Technology File两部分。Library部分有Name和Directory 两项,分别输入要建立的Library的名称和路径。如果只建立进行SPICE模拟的线路图,Technology部分选择Don’t need a techfile选项。如果在库中要创立掩模版或其它的物理数据(即要建立除了schematic外的一些view),则须选择Compile a new techfile(建立新的techfile)或Attach to an existing techfile(使用原有的techfile)。 7、建立单元文件(cell):在Library Name中选择存放新文件的库,在Cell Name中输 入名称,然后在Tool选项中选择Composer-Schematic工具(进行SPICE模拟),在View Name中就会自动填上相应的View Name—schematic。当然在Tool工具中还有很多别的

STM32嵌入式系统实验报告模板

实验一使用固件函数库创建库函数模板 一、实验目的 1. 熟悉STM32的开发环境MDK Keil和仿真软件Proteus 2. 熟悉STM32的固件库函数文件夹 3. 掌握STM32固件库的使用方法 二、实验内容 1.开发自己的固件库函数模板 三、预备知识 掌握基于STM32固件库进行编程的方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:嵌入式开发平台,USB转串口数据线; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:Keil μVision5 IDE; 五、实验过程 1.创建本地文件夹和软件中的文件夹 2. 对软件中的文件夹进行配置

3.软件设计及代码(写一个简单的main函数)

六、遇到的问题及解决方法

实验二使用STM32固件库点亮LED灯 一、实验目的 1. 掌握STM32固件库的使用方法 2. 掌握基于库函数模板的开发方法 3. 掌握基于固件库进行GPIO端口编程的方法 二、实验内容 1. 使用Proteus软件设计点亮LED灯电路 2. 基于固件库进行编程 3. 基于固件库编程控制GPIO端口的输出,进而控制LED灯的显示状态 三、预备知识 掌握基于STM32固件库进行编程的方法;掌握Proteus软件的使用方法;掌握GPIO端口的组成、工作方式、编程方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:嵌入式开发平台,USB转串口数据线; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:Keil μVision5 IDE; 五、实验过程 1.LED灯电路设计 2. GPIO初始化过程

嵌入式课程设计报告

嵌入式课程设计报告设计题目:电子密码锁

、 摘要 随着科技和人们的生活水平的提高,实现防盗的问题也变得尤为突出,传统机械锁构造简单,电子锁的保密性高,使用灵活性好。根据需要设计运用W90P170开发板,制作一款电子密码锁,密码锁通过键盘输入密码,通过在LCD的文字和图片显示当前密码锁的状态。实现设置密码,密码验证,错误密码自锁、图片显示的功能。 目录

一、选题意义及系统功能 (3) 二、硬件设计及描述 (4) 三、软件设计及描述 (5) 四、程序代码 (6) 五、课程设计体会 (11) 六、运行结果 (12) 七、心得体会 (12) 八、参考文献 (13) 九、附录 (13) 一、选题意义及功能描述 1、选题意义 电子密码锁是通过密码输入来控制电路或是芯片工作,从而控制机械的开关闭合、开锁的电子产品。随着科技提高和人们生活水平的提高,对电子密码锁的需求增加。电子密码做较传统的机械锁安全性能更高。 特点如下: (1)保密性好,编程量大,随机开锁的成功率几乎为零。

(2)密码可变,用户可以随时改变密码,防止密码被盗,同时也可以避免人员的更替而使锁的密级下降。 (3)误码输入保护,输入密码多次错误是,系统进行自锁。 (4)无活动零件,不会磨损,寿命长。 (5)使用灵活性好,无需佩戴钥匙,操作简单。 2、功能描述 基本功能: (1)从键盘输入任意6位数字作为密码,将这六位数字经过USI总线存储到Flash芯片中,设置密码完成。 (2)从键盘输入密码,比较键盘输入的密码与Flash中存储的密码是否相同。 (3)如果密码正确,则LED灯点亮;如果密码不正确,则LED灯闪烁,而且如果连续三次输入密码错误则系统锁定,不允许再次输入密码。 扩展功能: (1)首先显示“请输入密码:”,显示密码锁背景图片1。 (2)如果密码正确则显示“密码正确”,显示成功进入系统的背景图片2。 (3)如果密码不正确则显示“密码不正确,请重新输入:” (4)如果连续三次输入密码错误则显示“对不起,您已经连续三次输入密码错误,系统锁定”,显示图片1。

食品工程原理课程教学基本要求

食品工程原理课程教学基本要求(征求意见稿) 一、本课程的地位、作用和任务 食品工程原理是食品科学与工程专业的一门主干课程和专业基础课程,具有较强的理论性,且与生产实际紧密相联系。学习本课程要求学生具备一定的物理学知识和物理化学知识。食品工程原理以食品加工单元操作为主要对象,研究食品物料在加工过程中的动量、能量、质量的传递与守恒关系。通过本课程的学习,掌握食品加工常见单元操作的基本原理与工艺计算,典型设备的设计计算。综合利用所学知识与食品工程生产实际相结合,着重培养分析与解决工程问题的方法和能力,为进一步学习食品领域的专业课程或从事食品工业生产及相关领域的工作打下扎实基础。 二、本课程的教学基本内容与要求 (一)理论教学部分 0. 绪论 (基本内容) 1)单元操作的基本概念;三种传递过程及其物理量的守恒 2)本课程的研究方法、学习要求 3)物理量的量纲与单位换算 (可选内容) 食品工程发展现状及趋势 1.流体流动 (基本内容) 1)流体静力学:流体的物理性质,流体静力学基本方程及其应用; 2)流体流动的守恒原理:流体流动的基本概念,质量守恒----连续性方程式,机械能守恒----伯努利方程式,动量守恒及其与机械能守恒之间的关系; 3)流体流动的内部结构:雷诺实验与流体流动类型,直圆管内流体的流速分布,流动边界层; 4)流体在管内的流动阻力:沿程阻力,局部阻力; 5)简单管路的计算 6)流量测量:测速管,孔板流量计,转子流量计; (可选内容) 非牛顿流体的流动阻力; 复杂管路(并联/分支)的计算; 2. 流体输送 (基本内容) 1)液体输送机械:离心泵;其他类型泵(容积泵、浓浆泵、磁力驱动泵); 2)气体输送机械:离心式风机,鼓风机和压缩机,真空泵及真空管路; 3)流体输送设备的种类特点及选型

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 :安磊 班级:计科0901 学号: 0909090310 指导老师:宋虹

目录 课程设计容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------ 6 文件系统的层次结构和功能模块 --------------------- 6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录 -------------------------------------------------- 12

课程设计容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小核可编译至 2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统核,它仅仅包含了任务调度,任务管理,时间管理,存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时核,并在这个核之上提供最基本的系统服务,如信号量,,消息队列,存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

计算机组成原理实验报告单周期cpu的设计与实现

1个时钟周期 Clock 电子科技大学计算机科学与工程学院 标 准 实 验 报 告 (实验)课程名称: 计算机组成原理实验 电子科技大学教务处制表 电 子 科 技 大 学 实 验 报 告 学生姓名: 郫县尼克杨 学 号: 2014 指导教师:陈虹 实验地点: 主楼A2-411 实验时间:12周-15周 一、 实验室名称: 主楼A2-411 二、 实验项目名称: 单周期CPU 的设计与实现。 三、 实验学时: 8学时 四、 实验原理: (一) 概述 单周期(Single Cycle )CPU 是指CPU 从取出1条指令到执行完该指令只需1个时钟

周期。 一条指令的执行过程包括:取指令→分析指令→取操作数→执行指令→保存结果。对于单周期CPU 来说,这些执行步骤均在一个时钟周期内完成。 (二) 单周期cpu 总体电路 本实验所设计的单周期CPU 的总体电路结构如下。 (三) MIPS 指令格式化 MIPS 指令系统结构有MIPS-32和MIPS-64两种。本实验的MIPS 指令选用MIPS-32。以下所说的MIPS 指令均指MIPS-32。 MIPS 的指令格式为32位。下图给出MIPS 指令的3种格式。 本实验只选取了9条典型的MIPS 指令来描述CPU 逻辑电路的设计方法。下图列出了本实验的所涉及到的9条MIPS 指令。 五、 实验目的 1、掌握单周期CPU 的工作原理、实现方法及其组成部件的原理和设计方法,如控制器、26 31 221 216 15 11 1 6 5 0 op rs rt rd sa func R 型指令 26 31 221 216 15 0 op rs rt immediate I 型指令 26 31 20 op address J 型指令

食品工程原理实验报告

流化床干燥实验报告 姓名:张萌学号:5602111001 班级:食品卓越111班 一、实验目的 1.了解常压干燥设备的基本流程和工作原理。 2. 掌握测定干燥速度曲线的方法。 3. 掌握根据实验干燥曲线求取干燥速率曲线以及恒速阶段干燥速 率、临界含水量、平衡含水量的实验分析方法。 二、基本原理 1.干燥速率:单位干燥面积(提供湿分汽化的面积)、单位时间内所除去的湿分质量。 2.干燥速率的测定方法:利用床层的压降来测定干燥过程的失水量。需要用到的公式有: 物料中瞬间含水率X i=(△p-△p e)/△p e 式中:△p-时刻τ时床层的压差; 计算出每一时刻的瞬间含水率X i,然后将X i对干燥时间iτ作图,即为干燥曲线。 3.干燥过程分析: (1)物料预热阶段 (2)恒速干燥阶段 (3)降速干燥阶段。 非常潮湿的物料因其表面有液态水存在,当它置于恒定干燥条件下,则其温度近似等于热风的湿球温度tw ,到达此温度前的阶段称为

(1)阶段。在随后的第二阶段中,由于表面存有液态水,物料温度约等于空气的湿球温度tw,传入的热量只用来蒸发物料表面水分,在第(2)阶段中含水率X随时间成比例减少,因此其干燥速率不变,亦即为恒速干燥阶段。在第(3)阶段中,物料表面已无液态水存在,亦即若水分由物料内部的扩散慢于物料表面的蒸发,则物料表面将变干,其温度开始上升,传入的热量因此而减少,且传入的热量部分消耗于加热物料,因此干燥速率很快降低,最后达到平衡含水率而终止。(2)和(3)交点处的含水率称为临界含水率用X0表示。对于第(2)(3)阶段很长的物料,第(1)阶段可忽略,温度低时,或根据物料特性亦可无第二阶段。 三、实验装置与流程 1.主要设备及仪器 (1)鼓风机:BYF7122,370W; (2)电加热器:额定功率2.0KW; (3)干燥室:Φ100mm×750mm; (4)干燥物料:耐水硅胶; (5)床层压差:Sp0014型压差传感器,或U形压差计。 2.实验装置

嵌入式系统实验报告

实验报告 课程名称:嵌入式系统 学院:信息工程 专业:电子信息工程 班级: 学生姓名: 学号: 指导教师: 开课时间:学年第一学期

实验名称:IO接口(跑马灯) 实验时间:11.16 实验成绩: 一、实验目的 1.掌握 STM32F4 基本IO口的使用。 2.使用STM32F4 IO口的推挽输出功能,利用GPIO_Set函数来设置完成对 IO 口的配置。 3.控制STM32F4的IO口输出,实现控制ALIENTEK 探索者STM32F4开发板上的两个LED实现一个类似跑马灯的效果。 二、实验原理 本次实验的关键在于如何控制STM32F4的IO口输出。IO主要由:MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR、AFRH和AFRL等8个寄存器的控制,并且本次实验主要用到IO口的推挽输出功能,利用GPIO_Set函数来设置,即可完成对IO口的配置。所以可以通过了开发板上的两个LED灯来实现一个类似跑马灯的效果。 三、实验资源 实验器材: 探索者STM32F4开发板 硬件资源: 1.DS0(连接在PF9) 2.DS1(连接在PF10) 四、实验内容及步骤 1.硬件设计 2.软件设计 (1)新建TEST工程,在该工程文件夹下面新建一个 HARDWARE文件夹,用来存储以后与硬件相关的代码。然后在 HARDWARE 文件夹下新建一个LED文件夹,用来存放与LED相关的代码。 (2)打开USER文件夹下的test.uvproj工程,新建一个文件,然后保存在 LED 文件夹下面,保存为 led.c,在led.c中输入相应的代码。

(3)采用 GPIO_Set 函数实现IO配置。LED_Init 调用 GPIO_Set 函数完成对 PF9 和 PF10 ALIENTEK 探索者 STM32F407 开发板教程 119 STM32F4 开发指南(寄存器版) 的模式配置,控制 LED0 和 LED1 输出 1(LED 灭),使两个 LED 的初始化。 (4)新建一个led.h文件,保存在 LED 文件夹下,在led.h中输入相应的代码。 3.下载验证 使用 flymcu 下载(也可以通过JLINK等仿真器下载),如图 1.2所示: 图1.2 运行结果如图1.3所示:

电子电路综合设计实验报告

电子电路综合设计实验报告 实验5自动增益控制电路的设计与实现 学号: 班序号:

一. 实验名称: 自动增益控制电路的设计与实现 二.实验摘要: 在处理输入的模拟信号时,经常会遇到通信信道或传感器衰减强度大幅变化的情况; 另外,在其他应用中,也经常有多个信号频谱结构和动态围大体相似,而最大波幅却相差甚多的现象。很多时候系统会遇到不可预知的信号,导致因为非重复性事件而丢失数据。此时,可以使用带AGC(自动增益控制)的自适应前置放大器,使增益能随信号强弱而自动调整,以保持输出相对稳定。 自动增益控制电路的功能是在输入信号幅度变化较大时,能使输出信号幅度稳定不变或限制在一个很小围变化的特殊功能电路,简称为AGC 电路。本实验采用短路双极晶体管直接进行小信号控制的方法,简单有效地实现AGC功能。 关键词:自动增益控制,直流耦合互补级,可变衰减,反馈电路。 三.设计任务要求 1. 基本要求: 1)设计实现一个AGC电路,设计指标以及给定条件为: 输入信号0.5?50mVrm§ 输出信号:0.5?1.5Vrms; 信号带宽:100?5KHz; 2)设计该电路的电源电路(不要际搭建),用PROTE软件绘制完整的电路原理图(SCH及印制电路板图(PCB 2. 提高要求: 1)设计一种采用其他方式的AGC电路; 2)采用麦克风作为输入,8 Q喇叭作为输出的完整音频系统。 3. 探究要求: 1)如何设计具有更宽输入电压围的AGC电路; 2)测试AGC电路中的总谐波失真(THD及如何有效的降低THD 四.设计思路和总体结构框图 AGC电路的实现有反馈控制、前馈控制和混合控制等三种,典型的反馈控制AGC由可变增益放大器(VGA以及检波整流控制组成(如图1),该实验电路中使用了一个短路双极晶体管直接进行小信号控制的方法,从而相对简单而有效实现预通道AGC的功能。如图2,可变分压器由一个固定电阻R和一个可变电阻构成,控制信号的交流振幅。可变电阻采用基极-集电极短路方式的双极性晶体管微分电阻实现为改变Q1电阻,可从一个由电压源V REG和大阻值电阻F2组成的直流源直接向短路晶体管注入电流。为防止Rb影响电路的交流电压传输特性。R2的阻值必须远大于R1。

嵌入式系统课程设计报告

湖北民族学院 信息工程学院 课程设计报告书 题目 :基于A RM的数字式万年历 课程:嵌入式系统课程设计 专业:电子信息科学与技术 班级: 03114411 学号: 031441119 学生姓名:田紫龙 指导教师:易金桥 2017年6 月20 日

信息工程学院课程设计任务书 学号031441119学生姓名田紫龙专业(班级)0314411 设计题目基于 ARM 的数字式万年历 1.能测量温度并且实时显示; 2.具有时间显示功能,能够显示年月日,时分秒,并且可以手动调节时间。 设 3. 具有 12 小时制和 24 小时制切换功能。 计 技 术 参 数 对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。温度采集 选用 DS18B20芯片,万年历采用直观的数字显示,数据显示采用1602 液晶显 示模块,可以在LCD1602 上同时显示年、月、日、周日、时、分、秒,还具有 设 时间校准整点灯光提醒等功能。制作仿真和实物。 计 要 求 [1]苏平 . 单片机的原理与接口技术 [M]. 北京 : 电子工业出版社, 2006,1-113. [2]王忠民 . 微型计算机原理 [M]. 西安 : 西安科技大学出版社, 2003,15-55. [3]左金生 . 电子与模拟电子技术 [M]. 北京 : 电子工业出版社, 2004,105-131. [4]新编单片机原理与应用(第二版). 西安电子科技大学出版社, 2007.2 [5]张萌 . 单片机应用系统开发综合实例 [M]. 北京:清华大学出版社, 2007.7 [6] 朱思荣. 51 单片机实现公历与农历、星期的转换[Z].当当电子网 [7]李广弟 . 单片机原理及应用 [M] 北京航空航天大学出版社 ,2004 年 参[8] 王越明 . 电子万年历的设计 [J]. 黑龙江科技信息, 2004 年 考 资 料 2017年 6 月 20 日

《食品工程原理》教学大纲

食品工程原理课程教学大纲 一、课程基本概况 课程名称:食品工程原理 课程名称(英文):PRINCIPLES OF FOOD ENGINEERING 课程编号:0611306 课程总学时:70学时(讲课60学时,实验10学时) 课程学分:3.5学分 课程分类:必修课 开设学期:第4学期 适用专业:食品科学与工程专业 先修课程:《高等数学》、《大学物理》、《物理化学》、《机械制图》等课程 后续课程:《粮油食品工艺学》、《畜产食品工艺学》、《果蔬食品工艺学》、《食品机械》、《食品工厂设计》 二、课程的性质、目的和任务 本课程是食品科学与工程专业主要的必修课之一。本课程是在高等数学、物理学、物理化学等课程的基础上开设的一门专业基础课程,是承前启后,由理及工的桥梁。主要目的是培养分析和解决有关单元操作各种问题的能力,以便在食品生产、科研与设计中到强化生产过程,提高产品质量,提高设备生产能力及效率,降低设备投资及产品成本,节约能耗,防止污染及加速新技术开发等。主要任务是:研究单元操作的基本原理、典型设备的构造及工艺尺寸的计算(或选型)。 三、主要内容、重点及深度 (一)理论教学 绪论 目的要求:了解食品工程原理的性质、任务、学习方法;掌握单位换算、物料衡算、能量衡算的基本方法。 主要内容: 一、食品工程原理的发展历程 二、食工原理的性质、任务、与内容 三、单位制与单位换算 四、物料衡算 五、能量衡算 六、过程平衡与速率 重点:单元操作的概念单位换算、物料衡算、能量衡算。 难点:经验公式的单位变换、试差计算法 1 / 8

第一章流体流动 目的要求:使学生了解流体平衡和运动的基本规律,熟练掌握静力学基本方程式、连续性方程式、柏努力方程式的内容和应用、流体在管内的流动阻力,在此基础上解决管路计算、输送设备功率计算等问题。 重点:静力学基本方程式、连续性方程式、柏努力方程式的内容和应用、流体在管内的流动阻力 难点:柏努力方程式的推导及其应用、流动边界层的概念、流动阻力计算公式的推导 主要内容: 第一节流体静力学方程式及其应用 一、流体静力学方程式 二、流体静力学基本方程式的应用 第二节流体在管内的流动 一、稳定流动与不稳定流动 二、连续性方程式 三、柏努利方程式 四、柏努利方程式的应用 第三节流体在管内的流动阻力 一、顿粘性定律与流体的粘度 二、流动类型与雷诺准数 三、滞流与湍流 四、边界层的概念 五、流动阻力 第四节管路计算与流量测量 一、管路计算 二、流量测量 第二章粉碎与筛分 目的要求:掌握粉碎与筛分单元操作的基本概念、基本原理和基本计算。 重点:粒度的大小、形状及分布,粉碎速率、粉碎能耗、平均粒度、筛分速率 难点:食品物料粒度的大小、形状及分布,粉碎速率、粉碎能耗、平均粒度、筛分速率。 主要内容: 第一节粉碎 一、概述 二、粉碎理论 第二节筛分 一、筛分理论

南邮嵌入式系统B实验报告2016年度-2017年度-2

_* 南京邮电大学通信学院 实验报告 实验名称:基于ADS开发环境的程序设计 嵌入式Linux交叉开发环境的建立 嵌入式Linux环境下的程序设计 多线程程序设计 课程名称嵌入式系统B 班级学号 姓名 开课学期2016/2017学年第2学期

实验一基于ADS开发环境的程序设计 一、实验目的 1、学习ADS开发环境的使用; 2、学习和掌握ADS环境下的汇编语言及C语言程序设计; 3、学习和掌握汇编语言及C语言的混合编程方法。 二、实验内容 1、编写和调试汇编语言程序; 2、编写和调试C语言程序; 3、编写和调试汇编语言及C语言的混合程序; 三、实验过程与结果 1、寄存器R0和R1中有两个正整数,求这两个数的最大公约数,结果保存在R3中。 代码1:使用C内嵌汇编 #include int find_gcd(int x,int y) { int gcdnum; __asm { MOV r0, x MOV r1, y LOOP: CMP r0, r1 SUBLT r1, r1, r0 SUBGT r0, r0, r1 BNE LOOP MOV r3, r0 MOV gcdnum,r3 //stop // B stop // END } return gcdnum; } int main() { int a; a = find_gcd(18,9);

printf("gcdnum:%d\n",a); return 0; } 代码2:使用纯汇编语言 AREA example1,CODE,readonly ENTRY MOV r0, #4 MOV r1, #9 start CMP r0, r1 SUBLT r1, r1, r0 SUBGT r0, r0, r1 BNE start MOV r3, r0 stop B stop END 2、寄存器R0 、R1和R2中有三个正整数,求出其中最大的数,并将其保存在R3中。 代码1:使用纯汇编语言 AREA examp,CODE,READONL Y ENTRY MOV R0,#10 MOV R1,#30 MOV R2,#20 Start CMP R0,R1 BLE lbl_a CMP R0,R2 MOVGT R3,R0 MOVLE R3,R2 B lbl_b lbl_a CMP R1,R2 MOVGT R3,R1 MOVLE R3,R2 lbl_b B . END 代码2:使用C内嵌汇编语言 #include int find_maxnum(int a,int b,int c)

《混凝土结构设计原理》课程实验报告书

《混凝土设计原理》 实验报告 专业___________________ 班级学号___________________ 姓名___________________ 指导教师___________________ 学期___________________ 南京工业大学土木工程学院

目录 测量实验注意事项 (1) 实验一:受弯构件正截面破坏 (2) 实验二:受弯构件斜截面破坏 (4) 实验三:偏心受压柱破坏 (6)

实验注意事项 1、实验前必须阅读有关教材及本实验指导书,初步了解实验内容要求与步骤。 2、实验记录应用正楷填写,不可潦草,并按规定的地位书写实验组号、日期、天气、仪器名称、号码及参加人的姓名等。 3、各项记录须于测量进行时立即记下,不可另以纸条记录,事后誉写。 4、记录者应于记完每一数字后,向观测者回报读数,以免记错。 5、记录数字若有错误,不得涂改,也不可用像皮擦拭,而应在错误数字上划一斜杠,将改正之数记于其旁。 6、简单计算及必要的检验,应在测量进行时算出。 7、实验结束时,应把实验结果交给指导教师审阅,符合要求并经允许,方可收拾仪器结束实验,并按实验开始时领取仪器的位置,归还仪器与工具。 8、注意人身安全和仪表安全,试件本身要有保护措施:如用绳子捆住用木楔垫好;数据读好后,远离试件,这点尤其是当试验荷载的后期更应注意。 9、试验研究工作,是个实践性很强,责任心很强的细致戏作,一定要有严格的责任制和实事求是的精神。数据要认真细致的测读,不能读错,不能搞乱。大家分工协作,互相校对。

实验一单筋矩形梁破坏 姓名班级学号 组别组员 试验日期报告日期 一、试验名称 二、试验目的和内容 三、试验梁概况 梁号截面尺寸主筋实测保护层厚度 四、材料强度指标 混凝土:设计强度等级试验实测值f c s= N/mm2E c= N/mm2钢筋:试验实测值:HPB235,f y s= N/mm2E s= N/mm2 HRB335,f y s= N/mm2E s= N/mm2 五、试验数据记录 1、百分表记录表(表1) 2、手持式应变仪记录表(表2) 六、试验结果分析 1、画出适筋梁荷载——挠度曲线(M-f)并分析曲线特征

广东海洋大学嵌入式系统课程设计

《嵌入式系统》设计报告学生姓名 Adao (学号) 所在学院数学与计算机学院 所在班级计科1141 指导教师 成绩

目录 1.课程设计目的 (2) 2.系统分析与设计 (2) 3.系统结构图 (2) 4.实现过程 (3) 5.实验效果 (5) 6.代码分析 (6) 7.系统测试出现的问题和解决的方案 (7) 8.系统优缺点 (7) 9.心得体会 (8) 参考文献 (8)

双按键控制流水灯系统开发 1.课程设计目的: 本次课程设计目的主要是对之前所学习的STM32的某个实验进行更深入的学习与了解,弄懂引脚,端口等相关的配置,对实验原理和具体实现有一定的理解,能做到自己通过原理图和使用库函数等把功能实现出来。我选择的是EXTI-外部中断实验并加以整合,具有一定实用功能的系统,可以对外提供服务。 2.系统分析与设计: 本课程设计所定义的系统主要功能为,通过两个按键KEY1(PA0)、KEY2(PC13)可以实现对流水灯进行同步控制,即一个开关控制产生的灯的状态可以被另一个开关去改变,按键控制需要对两个按键的端口,引脚等进行相关配置,并在两个引脚的中断服务程序中完成对流水灯状态同步控制的操作。本还想通过使用SysTick(系统滴答定时器)功能对流水灯进行精确定时,但由于时间比较匆促,最终没有实现。 3.系统结构图: 图3-1

4.实现过程: 1、GPIO的输入模式有上拉输入模式、下拉输入模式、浮空输入模式和模拟输入模式。GPIO 中的每个引脚可以通过配置端口配置寄存器来配置它的模式。每个引脚的模式由寄存器的4个位控制。 上拉/下拉输入模式:1000 浮空输入模式:0100 模拟输入模式:0000 2、STM32的所有GPIO都可以用作外部中断源的输入端。STM32的中断由中断控制器NVIC 处理。STM32的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表面它的优先级别越高。抢占属性会出现嵌套中断。 3、编写NVIC_Configuration()函数配置NVIC控制器的函数。 static void NVIC_Configuration(uint8_t IRQ) { NVIC_InitTypeDef NVIC_InitStructure; //将NVIC中断优先级分组设置为第1组 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* 配置中断源 */ NVIC_InitStructure.NVIC_IRQChannel = IRQ;//设置中断线 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//设置抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//设置响应优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //对NVIC中断控制器进行初始化 } 4、调用GPIO_EXTILineConfig()函数把GPIOA、Pin0和GDIOC、PIN13设置为EXTI输入线。 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); 5、填写EXTI的初始化结构体,然后调用EXTI_Init()把EXTI初始化结构体的参数写入寄存器。编写EXTI_PA0_Config()函数完成各种需要的初始化。 void EXTI_Pxy_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* config the extiline clock and AFIO clock */

相关主题
文本预览
相关文档 最新文档