版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计(论文)任务书 信息工程 学院计算机科学技术 专业 计算机08-1 班 一、课程设计(论文)题目 数据采集2 二、课程设计(论文)工作自 2011 年 12 月 12 日起至 2011 年 12 月 16 日止。三、课程设计(论文) 地点: 教学楼5号楼4楼-嵌入式实验室 四、课程设计(论文)内容要求:1本课程设计的目的主要通过介绍Linux操作系统内核的重要系统接口,掌握数字式温度DS1621芯片电气特性、通信协议格式等基本原理和规范,编写在Linux操作系统下得驱动程序,希望读者理解嵌入式系统中驱动程序的结构和设计方法。 2课程设计的任务及要求1)基本要求:本课程设计要求学生了解L
2、inux操作系统下设备驱动程序的基本知识,掌握Linux内核提供的重要函数接口,掌握IIC接口连接外部设备连接的方法,根据所掌握的知识编写驱动程序和应用程序源代码,实现以下功能:在Linux操作系统和ARM嵌入式教学实验系统环境下,利用ARM嵌入式教学实验平台留有的扩展接口连接3个温度传感器DS1621芯片,设计接口电路并联线,编写驱动程序和应用程序实现温度的采集并从终端输出(输出格式:第几个传感器:温度值=+32.5)和LED显示(显示格式:传感器号-32.5)。 2)创新要求: 在基本要求达到后,可进行创新设计,如改善电路性能;对系统进行仿真分析。3)课程设计论文编写要求(1)要按照书稿的
3、规格打印誊写课设论文(2)论文包括目录、绪论、正文、小结、参考文献、谢辞、附录等(3)课设论文装订按学校的统一要求完成4)答辩与评分标准: (1)完成原理分析:20分; (2)完成设计过程:30分; (3)完成调试:30分;(4)回答问题:20分。5)参考文献:1 刘淼. 嵌入式系统接口设计与Linux驱动程序开发M. 北京航空航天大学出版社 2008. 2 孙天泽 袁文菊. 嵌入式设计及Linux驱动开发指南-基于ARM9处理器M 电子工业出版社 2007 . .6)课程设计进度安排内容 天数地点构思及收集资料 1图书馆组装与调试 3实验室撰写论文 1图书馆、实验室学生签名: 2011 年
4、12 月 12 日课程设计(论文)评审意见(1)完成原理分析(20分):优()、良()、中()、一般()、差(); (2)设计分析(30分):优()、良()、中()、一般()、差(); (3)完成调试(30分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)格式规范性及考勤是否降等级:是()、否()评阅人: 职称: 副教授 2011 年 12 月 19 日目录第一章 课程设计绪论11.1 课程设计目的11.2课程设计要求11.3 环境要求11.4 小组成员分工1第2章 数码管LED概述22.1 LED数码管结构22.2 LE
5、D数码管工作原理22.3 LED数码管驱动方式3第三章 概要设计43.1总体设计思路43.2总流程图43.3 LED驱动程序设计思路53.4 DS1621驱动程序设计流程图5第四章 详细设计74.1 LED驱动原理74.2 LED驱动程序设计74.3 应用程序设计7第5章 上机调试与运行结果75.1终端输出结果:75.2 LED显示结果:7第6章 课程设计小结8附录1 程序清单9附录2 参考文献15第一章 课程设计绪论1.1 课程设计目的主要通过介绍Linux操作系统内核的重要系统接口,掌握数字式温度DS1621芯片电气特性、通信协议格式等基本原理和规范,编写在Linux操作系统下得驱动程序,
6、希望读者理解嵌入式系统中驱动程序的结构和设计方法。1.2课程设计要求本课程设计要求学生了解Linux操作系统下设备驱动程序的基本知识,掌握Linux内核提供的重要函数接口,掌握IIC接口连接外部设备连接的方法,根据所掌握的知识编写驱动程序和应用程序源代码,实现以下功能:在Linux操作系统和ARM嵌入式教学实验系统环境下,利用ARM嵌入式教学实验平台留有的扩展接口连接3个温度传感器DS1621芯片,设计接口电路并联线,编写驱动程序和应用程序实现温度的采集并从终端输出(输出格式:第几个传感器:温度值=+32.5)和LED显示(显示格式:传感器号-32.5)。1.3 环境要求HHARM9-EDU实
7、验教学试验箱一套,PC机一台、3个温度传感器DS1621芯片,导线若干条。1.4 小组成员分工 欧阳娜(学号06)编写DS1621驱动程序,进行温度采集; 余力中(学号22)编写LED驱动程序和应用程序,进行温度采集。第2章 数码管LED概述2.1 LED数码管结构LED数码管实际上是由七个发光管组成8字形构成的器件,加上小数点就是8个,引线已在LED内部连接完成,只需引出它们的各个笔划,公共电极(结构见图2.1)。这些段分别由字母a,b,c,d,e,f,g,dp来表示,见图2.2。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。 图2.1 L
8、ED数码管结构图 图2.2 LED引脚led数码管根据LED的接法不同分为共阴和共阳两类:将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。led数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。2.2 LED数码管工作原理当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮(参考图2.3)。图2.32.3 LED数码管驱动方式LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码
9、管的驱动方式的不同,可以分为静态式和动态式两类。1.静态显示驱动: 静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O埠进行驱动,或者使用如BCD码二-十进位*器*进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O埠多,如驱动5个数码管静态显示则需要58=40根I/O埠来驱动,要知道一个89S51单片机可用的I/O埠才32个呢。故实际应用时必须增加*驱动器进行驱动,增加了硬体电路的复杂性。 2.动态显示驱动: 数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp 的同名端连在一
10、起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。 透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感
11、,动态显示的效果和静态显示是一样的,能够节省大量的I/O埠,而且功耗更低。第三章 概要设计由于我负责的主要是LED驱动程序和应用程序。因此,在此以LED驱动程序和应用程序的讲解为主。3.1总体设计思路首先,要对需要的参数和变量进行定义及初始化;然后,使用open函数打开温度传感器DS1621和LED数码管;再次,然后从温度传感器中采集温度;最后,再将采集的温度从终端输出,并显示对应的温度传感器序号,同时将结果显示在LED上。3.2总流程图1.总体设计流程图见图3.1。图3.13.3 LED驱动程序设计思路DS1621驱动程序设计思路如下:3.4 DS1621驱动程序设计流程图1.驱动程序设计流
12、程图见图3.2。图3.2第四章 详细设计4.1 LED驱动原理驱动LED的时候,应该分二种情况比如用共阳接法和共阴接法,共阳的时候LED正端接正电源,负端通过一个限流电阻接P口,这时不用接上拉电阻,只要这个限流电阻取合适就可以了发光管亮的时候电流就是从电源正LED限流电阻P口,P口为低电位发光管灭的时候没有电流流过,P口为高电位或高阻状态共阴接法,LED负端接地,正端直接P口,这时候要接上拉电阻,这个上拉电阻是提供LED发光用的,发光管亮的时候电流是从电源正上拉电阻LED 地。这时上拉电阻也是限流用的。P口为高电位或高阻状态发光管暗的时候电流是从电源正上拉电阻P口,这时LED无电流流过,P口为
13、低电位,限流电阻上流过电流全部从P口流入。4.2 LED驱动程序设计4.3 应用程序设计 第5章 上机调试与运行结果5.1终端输出结果:Open LED success!Open DS1621 success!NO1 DS1621 is 45.8N02 DS1621 is 69.6N03 DS1621 is 53.45.2 LED显示结果:6个LED数码管共显示了三组信息,如下:1-45.82-69.63-53.4第6章 课程设计小结用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。 静态显示就是显示驱动电路具有输出锁存功能,
14、单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。 附录1 程序清单1.驱动程序ds1621.c代码:#include #include #include #include #include #include #include #include
15、#include #include #include #include #include #define SKELETON_MAJOR 220unsigned char ds18b20ret3;typedef unsigned char uchar;devfs_handle_t devfs_ds18b20;intds1621_open(struct inode *, struct file *); /ds1621设备打开函数intds1621_release(struct inode *, struct file *); /ds1621设备释放函数intds1621_ioctl(struct
16、inode *, struct file *, unsigned int, unsigned long);/选择待测量的引脚,并触发中断ssize_t ds1621_read(struct file *, char * , size_t , loff_t *);ssize_t ds1621_write(struct file *, const char *, size_t , loff_t *);void writebyte(unsigned char dat,int i);/写函数uchar readbyte(int i); /读函数void setbit(int i); /设置电平void
17、 clearbit(int i);char getbit(int i);/获取电平void readtemp(int i);/读取温度static struct file_operations ds1621_fops = ioctl:ds1621_ioctl,open:ds1621_open,read:ds1621_read,write:ds1621_write,release:ds1621_release,;/ GPB0-9 GPB1-11 GPB9-13 GPB10-10 /1.GND;2,DQ;3,VDD#define STARTCONVER 0#define SETCHANNEL 1#
18、define rGPBCON ( *(volatile unsigned*)rGPBCONADD)#define rGPBDAT ( *(volatile unsigned*)rGPBDATADD)#define rGPBUP ( *(volatile unsigned*)rGPBUPADD)unsigned long rGPBCONADD;unsigned long rGPBDATADD;unsigned long rGPBUPADD;#define uchar unsigned char#define uint unsigned intunsigned int ichannel = 0;i
19、nt ds1621_open(struct inode *inode, struct file *filp)printk(open DS1621 success!n);return 0;ssize_t ds1621_read(struct file *filp, char * buf, size_t size, loff_t *offp) copy_to_user(buf,ds1621ret,3); return 0;ssize_t ds1621_write(struct file *filp, const char *buf, size_t size, loff_t *offp) char
20、_buf; copy_from_user(&_buf,buf,1); writebyte(_buf,ichannel); return 0;int ds1621_release(struct inode *inode, struct file *filp)printk(release okn);return 0;int ds1621_ioctl(struct inode *inode, struct file *flip, unsigned int command, unsigned long arg)int err = 0;switch (command) case STARTCONVER:
21、 initio(); readtemp(ichannel); return 0;case SETCHANNEL:switch(arg)case 0:ichannel = 0;return 0;case 1:ichannel = 1;return 0; case 2: ichannel = 9; return 0; default:err = -EINVAL; break; break;default:err = -EINVAL;return err;int _init ds1621_init(void) devfs_ds1621 = devfs_register(NULL,ds1621,DEV
22、FS_FL_DEFAULT, SKELETON_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, &ds1621_fops,NULL);rGPBCONADD = ioremap(0x,4);rGPBDATADD = ioremap(0x,3);rGPBUPADD = ioremap(0x,3); return 0;void _exit ds1621_exit(void) devfs_unregister(devfs_ds1621);module_init(ds1621_init);module_exit(ds1621_exit
23、);uchar x = 1;unsigned char flag;uchar temper2;void setioin(int i) rGPBCON = rGPBCON & (0x | (0x3(2*i);void setioout(int i) rGPBCON = rGPBCON & (0x | (0x3(2*i); rGPBCON = rGPBCON | (1(2*i);void setbit(int i)rGPBDAT |= 1i;void clearbit(int i)rGPBDAT &= (0x000 | 1i);void initio() rGPBUP &= ( 0x000 | 1
24、0 | 11 | 19 | 110 );char getbit(int i) return rGPBDAT&(10;j-)dat=1;setioout(i);clearbit(i);udelay(2);setbit(i);udelay(10);setioin(i); if(getbit(i) dat|=0x80;udelay(60);setioout(i);setbit(i);return(dat);void writebyte(unsigned char dat,int i)uchar j=0;setioout(i);setbit(i);for(j=8;j0;j-)clearbit(i);i
25、f(dat&0x01)udelay(10);setbit(i);udelay(60);elseudelay(75);setbit(i);dat=1;udelay(3);udelay(5);void readtemp(int i)uchar a=0,b=0;unsigned int t=0;flag = 0;reset(i);writebyte(0xcc,i);writebyte(0x44,i);udelay();reset(i);writebyte(0xcc,i);writebyte(0x7f,i);reset(i);writebyte(0xcc,i);writebyte(0xbe,i);a=
26、readbyte(i);b=readbyte(i);t=b;t=t0x7ff)t=t+1;flag=1;t=t4;ds1621ret0 = a&0x0f;ds1621ret1 = t;ds1621ret2 = flag;2.驱动程序led.c代码:#include #include #include #include #include #include #include #include #include #include #include #include #include led_ioctl.h#define LED_MAJOR 139#define LED_2 (LED_1 + 1)#d
27、efine LED_3 (LED_1 + 2)#define LED_4 (LED_1 + 3)#define LED_5 (LED_1 + 4)#define LED_6 (LED_1 + 5)#define led_sle (*(volatile unsigned long *)LED_GPACON)#define led_sle_data (*(volatile unsigned long *)LED_GPADATA)devfs_handle_t devfs_led;unsigned long LED_1;unsigned long LED_GPACON;unsigned long LE
28、D_GPADATA;unsigned long led_write_addr;intled_open(struct inode *, struct file *);intled_release(struct inode *, struct file *);int led_ioctl(struct inode *, struct file *, unsigned int, unsigned long);ssize_t led_read(struct file *, char * , size_t );ssize_t led_write(struct file *, char * , size_t
29、 );static struct file_operations led_fops = open:led_open,read:led_read,write:led_write, ioctl: led_ioctl,release:led_release,;int led_open(struct inode *inode, struct file *filp) /打开LED设备led_sle |= 0x2000; /chip_select enableled_sle_data &= (0x2000);/0 - chip_selectprintk(open LED success!n);return
30、 0;ssize_t led_read(struct file *fp, char * buf,size_t size)/读操作 return 1;ssize_t led_write(struct file *fp, char * buf, size_t size) /写操作char key;if (get_user(key, buf) return -EFAULT;(*(volatile unsigned char *) led_write_addr) = key; return 1;int led_release(struct inode *inode, struct file *filp
31、)led_sle &= (0x2000); /chip_select disableled_sle_data |= 0x2000;printk(release okn);return 0;int led_ioctl(struct inode *inode,struct file *flip,unsigned int command,unsigned long arg) int err = 0; switch (command) /judge which led want to lightcase IOCTRL_LED_1: led_write_addr = LED_1;break;case I
32、OCTRL_LED_2: led_write_addr = LED_2; break;case IOCTRL_LED_3: led_write_addr = LED_3; break;case IOCTRL_LED_4: led_write_addr = LED_4; break;case IOCTRL_LED_5: led_write_addr = LED_5; break;case IOCTRL_LED_6: led_write_addr = LED_6; break;default:err = -EINVAL; return err;int _init led_init(void)pri
33、ntk(*led_init*n);LED_GPACON = ioremap(0x,4);LED_GPADATA = ioremap(0x,4);LED_1 = ioremap(0x,8); devfs_led = devfs_register(NULL, led, DEVFS_FL_DEFAULT,LED_MAJOR,0, S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, &led_fops, NULL);return 0;static void _exit led_exit(void)devfs_unregister(devfs_led);mo
34、dule_init(led_init);module_exit(led_exit);3.应用程序iic_ds1621_test.c代码:#include #include #include #include #include #include #include #include #include #include #include unsigned char ledtab18 =0xDE,0x50,0x9D,0x5D,0x53,0x4F,0xCF,0x58,0xDF,0x5F,0xDB,0xC7,0x8E,0xD5,0x9F,0x8B,0x01,0x20;#include led_ioctl.htypedef unsigned char uchar;char retbuf6; int main() int led_fd,ds1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中级矿山救护工(四级)技能认定理论考试题(附答案)
- 网约车安全排查整治方案
- 环保公司土壤环境监测员年度工作总结报告
- 绵阳市涪城区总工会招聘工会社会工作者(2人)农业考试备考试题及答案解析
- 2026湖北武汉市华中农业大学附属学校小学语文教师招聘2人(第二轮)农业考试参考题库及答案解析
- 2026年4399游戏测试笔试题及答案
- 2026年上半年黑龙江冰雪体育职业学院公开招聘编制外人员15人农业考试参考题库及答案解析
- 2026广东茂名市电白区招聘急需紧缺人才卫生岗20人(第二批编制)农业考试模拟试题及答案解析
- 2026东北师范大学美术学院春季学期专任教师招聘2人(吉林)农业考试备考试题及答案解析
- 2026云南大理州民政精神病医院(大理州第四人民医院)编制外人员招聘6人农业考试模拟试题及答案解析
- 2026年山东春考《艺术设计类专业知识》模拟试题及答案解析
- 2026年及未来5年市场数据中国纸质文具行业市场发展现状及未来发展趋势预测报告
- 2025年四川省省级机关公开遴选考试真题(附答案)
- 2026年统编版二年级道德与法治下册每课教学设计
- 21《杨氏之子》第一课时公开课一等奖创新教学设计
- 2026河南省烟草专卖局(公司)高校毕业生招聘190人备考题库及一套完整答案详解
- TSG08-2026《特种设备使用管理规则》全面解读课件
- 2026年疫情期间应急处置演练方案及演练记录范本
- pe线管施工方案(3篇)
- 第三单元 认识国家制度 单元检测(含答案)-2025-2026学年八年级下册统编版道德与法治
- 上海上海市农业科学院工作人员招聘35人(2025年第一批)笔试历年参考题库附带答案详解(5卷)
评论
0/150
提交评论