时间:2023-03-01 16:29:08
序论:写作是一种深度的自我表达。它要求我们深入探索自己的思想和情感,挖掘那些隐藏在内心深处的真相,好投稿为您带来了七篇c语言程序设计实例范文,愿它们成为您写作过程中的灵感催化剂,助力您的创作。
关键词: 《C语言程序设计》 程序案例 计算思维 流程图
1.引言
《C语言程序设计》课程的实践性是很强的,理论联系实际是这门课的特点,怎样利用所学理论知识解决实际问题是学习这门课的重点,也是难点。多年的教学实践表明,在教学过程中使用计算思维的方法解决问题,对培养学生的综合应用能力是有益的,通过使用流程图描述算法,学生将更好地理解和掌握结构化程序设计方法。
2.教学中充分调动学生学习的积极性
学生只有对C语言程序有浓厚的兴趣,才会积极和创造性地学习。可从以下几个方面探讨:
(1)强调学生学习C语言的重要性。突出教学重点,使学生明确学习任务。在首次课堂教学中,教师一定要向学生讲解清楚C语言课程的教学目标(为什么学习编程或程序设计)。对于C语言程序设计课程的教学目标,可有如下三方面的讲解,学习基本的编程知识、培养求解问题的能力和具备一定的创新素质。知识的传授和学习应融入问题求解中;问题求解能力是创新的基础。
(2)结合《C语言全国计算机等级考试》的试题库进行教学,学生学习起来更有动力。试题库包括笔试试题库和上机试题库。试题库按章节分类,题目类型以程序设计为主。笔试题型有单项选择、程序分析、程序填空、程序改错和程序设计,上机题型有程序改错、程序填空和程序设计。
(3)利用Visual c++6.0工具进行C语言程序教学,培养学生的学习兴趣。VC是一种基于Windows操作系统的可视化集成开发环境,是广泛使用的一种开发工具。VC程序的两种模式是WINAPI方式和MFC方式。应用这两种模式能够有效提高教学质量,激发学生的学习兴趣。
3.教学内容的设置
上课内容安排不尽合理,对于实践教学环节重视不够,难以提高学生的积极性。教师应理论联系实际,注重编程实现的示范性,让学生清楚地看到教师编写代码和程序调试的过程和运行结果。上课安排内容应包括两部分:一部分为学习基本知识,对基础知识的理解和掌握。另一部分是理论联系实际,对实际案例问题的分析引导学生,并且案例留有思考空间,使学生举一反三,培养学生创造性思考的能力。比如在第一次课告诉学生C语言的十四种语句,既让学生对C语言有全面的认识,又消除学生对C语言的畏难情绪。C语言的语句概括起来只有十四种,即定义变量语句、赋值语句、返回语句、函数声明语句、函数调用语句、分支(选择)语句(共三种分支语句)、循环语句(共三种循环语句)、break语句、Conitnue语句和复合语句。所有的C程序,都是由其中的某些语句组成的。在具体介绍这些语句的时候,一定要完整清楚地列出各种语句的语法格式。以后讲C程序的时候,会提问学生这个程序中包含哪些C语句,学生比较容易看明白C程序的语句组成,帮助学生很快读懂程序,有利于改正学生编写程序时的常见语法错误。
4.实验指导书建设
学习C语言的很多学生都认为概念易懂,程序难写,其实主要是缺乏足够的实践和练习。依据主教材结构和实际需要,上机课结合课本《C语言程序设计上机指导》进行相关和有趣的案例的程序运行。学生分析算法、画出流程图到写出程序,并亲自运行出结果,会给学生很大的成就感。要将计算思维的方法应用到程序设计,设计各种算法以实现功能,并拓宽思路,掌握C语言的概念和编程方法。
5.案例设计与计算思维相结合
学习C语言,目的不是仅仅懂得一门程序设计语言,更重要的是让学生的编程思维得到锻炼和提高。C语言学习分成以下三个循序渐进的部分:第一部分是入门,主要介绍C语言程序的基本结构、数据的表达方式、基本表达式语句、C语言程序的运行方式等。这部分可以设计由简单表达式语句组成的按顺序执行的程序。第二部分是程序的基本结构,主要介绍程序设计的简单算法表示方法,分支结构和循环结构。这部分能用计算思维的方法,设计简单的算法,根据算法编写程序,掌握思考问题和解决问题的方法。第三部分是程序设计方法和手段的提高,主要介绍程序的模块化实现方法和更多的程序设计方法。这部分能采用计算思维的方式掌握模块化的程序设计方法,对问题进行分解,灵活地使用指针、结构、文件、位运算等方法编写程序。
6.案例设计实例
编写程序计算学生年龄的递归函数:已知第一位学生年龄最小为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。分析得到的递归公式如下:
age=10(n=1)age(n-1)+2(n>1)
在递归公式中,使用数字1为回归的条件,使用IFELSE语句决定是递推还是回归。
根据问题得出流程图和程序为:
只有写出递归算法的数学公式,才能编写出递归函数,从而很容易根据递归问题描述写出递归公式,进而写出递归程序。
7.结语
“基于问题求解的C语言”教学模式,随着我国计算机技术的应用和发展,为了适应社会的需求,培养学生解决问题的能力,增强学生自主能动性和动手操作能力,让学生成为社会的技能型人才,都是有益的。实践证明,借助流程图表达算法,能让学生更好地理解结构化程序设计的思想,更好地掌握C程序设计的核心方法。
参考文献:
[1]李丽娟.C语言程序设计教程实验指导与习题解答[M].北京:人民邮电出版社,2013.
[2]谭浩强.C程序设计[M].北京:清华大学出版社,1999.
[3]魏书堤,赵辉煌,邓红卫.基于计算思维的C语言教学案例设计[J].当代教育理论与实践,2014(3).
[4]但志平,汪东,王安慧,任小燕.地方高校C语言教学改革的探讨与分析[J].教育教学论坛,2014.5.
Abstract: This paper illustrates the mixed programming turn back mechanism and basic methods of parameter transferring.
关键词: C 语言;汇编语言;参数传递
Key words: C language;assembly language;parameter transferring
中图分类号:TP312 文献标识码:A 文章编号:1006-4311(2014)29-0225-02
1 绪论
C语言与汇编语言混合编程,可以发挥各自优势,提高程序的开发效率。这必然涉及到二者相互调用时的接口:C程序与汇编程序如何转返、二者之间如何互传数据。
2 名字声明约定
2.1 汇编、C模块对自己未定义的但要引用的别的模块的名字(该名字允许被引用)要声明。C模块声明格式:函数声明格式:extern类型函数名(形参表);变声明格式: Extern类型变量;汇编模块声明格式:函数声明格式:extern函数名:属性(near,far)。变声明格式:Extern变量名:属性(byte,word,dword等)。
2.2 自己定义的不仅自己可用,且可供别的模块引用的名字也必须声明。汇编模块声明格式:PUBLIC名字。C模块声明格式:全局变量,函数名前不加static即可。
3 转返机制
为了说明C主程序如何转到汇编子程序,汇编子程序执行结束如何返回C主程序,把例1 x1.c C程序翻译成汇编程序x1.asm,命令行键入命令TCC-S x1即可。
例1 /*x1.c*/
extern int f2(int,int,int);
main(){int a;a=f2(1,2,3);a=a+10;}
上述程序经编译后,汇编程序如下(无关内容省去)
/*x1.asm*/
_TEXT segment byte public 'CODE'
_main proc near ;小模式,类型为near,名字main编译后变为内部名(前加下划线)
push si ;保护si
mov ax,3
push ax ;实参3压栈
mov ax,2
push ax ;实参2压栈
mov ax,1
push ax ;实参1压栈
call near ptr _f2 ;转入子程序
add sp,6 ;丢弃栈中三个实参,确保实参不变
mov si,ax ;出口参数固定是ax,从ax取结果
mov ax,si ;机械性翻译,效率低,人工汇编编程,两个mov可不要
add ax,10
mov si,ax ;出口参数固定是ax,main加工结果送到约定寄存器ax
@1:pop si ;恢复si
ret ;main子程序返回
_main endp
_TEXT ends
PC机的堆栈是由高向低发展,压栈操作,栈中内容增多,SP值减小,反之出栈操作,栈中内容减少,SP值增大。
分析以上程序可看出,f(1,2,3)翻译成机器语言后变成若干条机器指令。结论:参数从右到左进入堆栈;在函数返回后,调用者要负责清除(平衡)堆栈。
4 C调汇编子程序
参数传递调用规范:主程序通过堆栈传递参数,主程序把待加工的数据放入栈中,子程序从堆栈中取数。子程序把加工的加工返还给主程序,结果小于等于16位,固定用AX;结果是32位,固定用DX和AX;结果大于32位,则存放在静态变量存贮区,AX(存段内地址)指向该区,若是FAR指针,DX(存段地址)和AX指向该区。所传数据可能是值,称为值传递,可能是地址,称为地址传递。
4.1 值传递:实参的值压栈
例2 /*f1.c*/
extern int add0(int,int);
main(){int x,y;x=2;y=3;printf("%d\n",add0(x,y));}
;f2.asm
.model small,c ;小模式,near过程,栈中只压IP,无CS
public add0
.code
add0 proc
push bp
mov bp,sp
mov ax,[bp+4] ;取第一个实参X
add ax,[bp+6] ; 取第二个实参Y,出口AX
pop bp
ret ;弹出返回地址,返回
add0 endp
end 程序运行结果是:5
4.2 传地址:实参的地址压栈
例3 /*f1.c*/
extern int add0(int*,int*);
main()
{int x,y;x=2;y=3;printf("%d\n",add0(&x,&y));}
;f2.asm
.model small,c ;小模式,near过程,栈中只压IP,无CS
public add0
.code
add0 proc
push bp
mov bp,sp
mov bx,[bp+4] ;取第一个实参X的地址送bx
mov ax,[bx]
mov bx,[bp+6] ; 取第二个实参Y的地址送bx
add ax,[bx] ;出口AX
pop bp
ret ;弹出返回地址,返回
add0 endp
end 程序运行结果是:5
4.3 通过外部变量 外部变量是公共变量,所有模块均可自由的使用,无需传递参数。但应当尽可能避免使用全局变量,否则不可避免因为某个全局变量的定义或使用而发生冲突,如例4.5。
例4 /*f1.c*/
int x=2;int y=3;int z;
extern void sub0(int,int);
main(){x=2;y=3;add0(x,y);printf("%d\n",z);}
;f2.asm
.model small,c ;小模式,near过程,栈中只压IP,无CS
public add0
extern x:word,y:word,z:word
.code
add0 proc
mov ax,x
add ax,y
mov z,ax
ret ;弹出返回地址,返回
add0 endp
end 程序运行结果是:5
5 汇编调C函数
例5 /*f1.c*/
extern int suba();
int subc(int x,int *y){return x-*y;}
main(){printf("%d\n",suba());}
;f2.asm
.model small,c; 小模式,near过程,栈中只压IP,无CS
extern subc:near
.data
x1 dw 50
y1 dw 10
public suba
.code
suba proc
mov ax,offset y1
push ax ;压第二个实参Y1,传地址
mov ax,x1
push ax ;压第一个实参X1,传值
call subc ;汇编调C函数
add sp,4 ;平衡堆栈
ret ;弹出返回地址,返回
suba endp
end 程序运行结果是:40
参考文献:
[1]谭浩强.C语言程序设计[M].清华大学出版社,2004.
Abstract: The pointer is the essence, focus and difficult of C language which is also the basis of C language Series. This article describes the arithmetic rules of pointer constants and variables in C language, as well as the access to the address.
关键词: 指针;地址;数组;运算
Key words: pointer;address;array;operation
中图分类号:TP312 文献标识码:A 文章编号:1006-4311(2014)11-0214-02
1 绪论
C语言的精华是指针,程序设计的关键也是指针,使用指针的难点是指针的运算。用指针访问数组元素,相对比较抽象,故本文用简单的自然语言予以浅析。
2 指针变量的概念
2.1 内存地址:内存中存储单元的编号 内存中,有众多的存储单元(单位:字节)。为了区分不同单元,必须为每一个单元编号,这个编号就是存储单元的“地址”,就像电话很多,为了区分每一部电话,必须为其编号,该编号就是电话号码。每个单元有且仅有一个惟一的地址。单元中存放数据,注意区分单元的地址与单元中的内容(数据)。
2.2 变量地址:该变量在内存中的起始地址 变量名是单元的外部名字(用户命名),单元号是单元的内部名字(系统命名)如 int x 假设整型变量是2个字节,系统分配的存储单元为 100 和101,则首地址100就是变量x在内存中的地址。
直接访问──直接利用变量的地址进行存取。
如:把“书”送给“张伟”就是直接访问。
间接访问──通过另一变量访问该变量的值。
如:把“书”送给“张伟他哥”就是间接访问,先间访“张伟”,知道他哥的地址,再按此地址送“书”。
2.3 指针变量
指针:即地址,存放地址的变量称为指针变量。
指针变量定义格式:数据类型 *指针变量[, *指针变量2……];
取地址运算的格式: &变量
例如
main()
{int x,*p; /*整形的指针的p单元
P=&x;
X=10;
*p+=20;
Printf(“%d,%d\n”,x,*p);
} 程序运行结果是30,30
3 数组的指针和指向数组的指针变量
3.1 数组的指针 数组元素在内存中连续存放,数组名代表数组首地址,是一个地址常量。
3.2 指向数组的指针变量的定义
例如,int a[10], *p=a(或&a[0]);
或者:int a[10], *p;p=a;
3.3 数组元素的引用
3.3.1 按名存取 有 int a[10],*p=a;定义,则p=a,一个数组,两个名字p和a,访问元素时用a[i]或p[i]。
3.3.2 按地址存取 有 int a[10],*p=a;定义,则:p+i和a+i都是数组元素a[i]的地址,访问元素时用*(p+i)和*(a+i)。按地址存取:*(p+i),*(a+i),按名存取:a[i],p[i]四个是等价关系。
注意:①p+n指向数组的下n个元素,而不是简单地使指针变量p的值+n。编译时为p+n*m。m为一个元素占用的字节数。②指针变量:既然是变量,其值随时在变,必须注意其当前值,否则容易出错。③指向数组的指针变量,可以指向数组以后的任何内存单元,C语言不做越界检查,这些单元不是系统分配的单元,强占资源,易导致死机。④int a[10],*p=a;p++对,a++错,a常量,p变量。
3.3.3 指向数组的指针变量所支持的运算 地址加减数值等于新地址,除此以外运算没有意义,由此得出推论,指针支持的运算有:
算术运算:指针变量±整形数据、指针变量-指针变量=整型数值,该数值表示两指针之间的数据个数,并非地址之差。
关系运算:指针变量 关系运算符 指针变量,表示两个变量值的大小关系,谁在前谁在后。
4 二维数组的指针及其指针变量
4.1 二维数组的指针 有定义语句: int a[3][4];
①从二维数组角度看,数组名a代表数组的起始地址, 是一个以行为单位进行控制的行指针,由一维数组构成的一维数组就是二维数组,a+i是行指针值,指向二维数组的第i行。*(a+i)是列指针值,指向第i行第0列。*(*(a+i)):数组元素a[i][0]的值。用a作指针访问数组元素a[i][j]的格式:*(*(a+i)+j)。②int a[3][4],b[4];由定义可看出,a[i]相当于数组名b,故a[0]、a[1]、a[2]分别表示第0、1、2一维数组的名字。③赋值:行指针变量=二维数组名或行指针变量。
4.2 行指针变量定义格式 数据类型 (*指针变量)[n];
4.3 二维数组元素的访问 int a[5][4],(*P)[4]=a;和int b[4],可以看出,b相当于a[5],第i行的一维数组名是a[i],元素地址±数值=元素地址,行地址±数值=行地址,a+i,a[i],*(a+i)其值相等,但a+i是行地址,a[i],*(a+i) 是元素地址。
①按名存取:a[i][j]或p[i][j]
②按地址存取:(*a[i]+j), *(*(a+i)+j), (*p[i]+j), *(*(p+i)+j)
5 动态数组的实现
静态数组:编译阶段确定数组的大小,运行阶段不能改变数组大小。缺点是事先无法准确确定数组的大小,太小不满足处理需要,太大浪费内存空间。
动态数组:运行阶段,根据实际需要动态确定数组的大小。
在C语言中,可利用内存的申请和释放库函数,以及指向数组的指针变量可当数组名使用的特点,来实现动态数组。如下程序
#include “alloc.h”
#include “stdlib.h”
main()
{ int *p=NULL, count, i,*q;
scanf(“%d”, &count);
p=(int *)malloc( sizeof(int) * count ); /*申请动态数组使用的内存块*/
if ( p==NULL ) exit(0);
for (i=0; i
for (q=p+ count-1; q>=p; q++) printf(“%d,”, *q); /*倒序显示*/
free(p); /*释放由malloc()函数申请的内存块*/
} 程序功能是键入任意个数据,倒序显示。
5.1 库函数malloc()
①用法:void *malloc(unsigned size)。②功能:在内存的动态存储区分配size个字节的连续空间。③返回值:申请成功,则返回新分配内存块的起始地址;否则,返回NULL。
malloc()函数的返回值是一个无类型指针,但在实际使用malloc()函数时,必须将其返回值强制转换成被赋值指针变量的数据类型,否则出错。
5.2 运算符sizeof
①格式:sizeof(变量名/类型名)。②功能:求变量/类型占用的内存字节数。如sizeof(long)=4。
5.3 库函数free()
①用法:void free(void *ptr)。②功能:释放由ptr指向的内存块(ptr是调用malloc() 函数的返回值)。③返回值:无。
一般情况下,使用malloc()函数申请的内存块,操作结束后,应及时使用free()函数予以释放。特别是在循环使用malloc()函数申请时,如果不及时释放不再使用的内存块,很可能很快就耗尽系统的内存资源,从而导致程序无法继续运行甚至死机。
6 结束语
学习C语言必须掌握指针的概念,以便为以后C系列语言学习打下基础。
参考文献:
[1]谭浩强.C语言程序设计[M].清华大学出版社,2004.
关键词: ATmega16单片机;数字温度传感器;仪用放大器;液晶显示
中图分类号:U469.75文献标识码:A文章编号:1671-7597(2012)0320059-01
0 引言
随着现代人的生活质量不断提高,在满足了衣食住行的需要以后,更加注重身体保健和合理饮食,以及保持健康的体形。随时关注自己体重的变化调配饮食,不仅对青年女性需要,对中年老年等各层次的男女人群都是非常需要和必要的。低成本、高智能化的智能人体电子秤无疑具有极其广阔的市场前景,具有较大的研究意义。
1 系统设计方案
1.1 系统结构。系统主要由电源模块、数据采集、数据处理和数据显示四大部分组成。由压力传感器、温度传感器组成的数据采集部分将所得的压力和温度数据送ATmega16单片机处理,然后将处理所得的体重和温度数据显示在液晶显示器上。
1.2 ATmega16单片机控制器。ATmega16是基于增强的AVR RISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。ATmega16具有16K字节的系统内可编程Flash,512字节EEPROM,1K 字节SRAM;32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程;三个具有比较模式的灵活的定时器/计数器,片内/外中断;可编程串行USART,有起始条件检测器的通用串行接口;8路10位具有可选差分输入级可编程增益的ADC;具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以及六个可以通过软件进行选择的省电模式。
1.3 压力传感器。1)压力传感器原理简介。电阻应变式传感器是一种利用电阻应变效应,将各种力学量转换为电信号的结构型传感器。电阻应变片把机械应变信号转换为R/R后,采用惠更斯电桥转换电路把应变片的R/R变化转换成电压或电流变化。2)压力信号前级滤波放大电路。压力信号前级电路是称重系统的重要组成部分,对系统的精度有很大影响。由于压力传感器输出的电压信号为毫伏级,所以对运算放大器精度要求很高。采用普通运算放大器组成的放大电路不能满足精度要求。这里采用差动输入,高共模抑制比,高差模输入阻抗,高增益,高精度精度且外部接口简单INA126仪用运算放大器,对压力传感器信号进行放大。
1.4 数字温度传感器DS18B20。DS18B20是Dallas 半导体公司发明的支持“一线总线”接口的温度传感器,其分辨率为9-12位,可根据需要通过程序设定精度;测量温度范围为-55℃~+125℃,在-10℃~+85℃范围内,精度可达±0.5℃。由于现场温度测量结果以9-12位数字量方式串行(“一线总线”)传送,不仅大大提高了系统的抗干扰性,而且简化了电路,在使用中不需要任何元件。同时,DS18B20支持3V-5.5V的电压范围,使系统设计更灵活、方便。
1.5 电源模块。电源部分也是系统的重要组成部分之一,其能否提供稳定而准确的电源关系到系统设计的成败。系统需要多种电源,采用12V直流电源供电,可以通过稳压芯片转换为其他电压值为电路各部分供电。首先12V经过三端稳压集成电路78L05后输出5V电路工作电压,同时又经过LM2575稳压电路后输出-5V为仪用放大器INA126提供负工作电压,经过AMS1117稳压器输出1.5V电压为单片机内ADC提供转换参考电压,它对ADC的转换精度有很大影响,所以必须保证精确稳定。
2 系统软件设计
按照硬件电路设计,采用C 语言编程。系统软件主要分为体重采集与处理子程序、温度采集与处理子程序、LCD液晶显示程序、体重存储子程序四个部分。主程序是为了协调各个环节的工作,硬件初始化包括端口初始化、T0初始化、T1初始化、外部中断初始化。体重测量数据通过A/D转换读取。温度转换是通过1线协议来控制和访问DS18B20读取温度数据。体重的存储由外部中断实现,包括T0溢出中断、T1溢出中断和外部中断INT2。其主程序流程如下图所示:
3 结论
本设计的创新之处有以下几个方面:1)选用内含8路10位ADC的ATmega16单片机为控制核心,大大简化了电路,节约了设计成本;2)能够存储并通过按键调出以前所测的体重,以便和当前体重比较,判断一段时间内体重升高或下降;3)应用了单总线数字温度传感器DS18B20,能够准确的测量和实时显示当前环境温度,简单而实用;4)系统操作简单方便,能够实现人机互动,用户界面友好。
参考文献:
[1]秦伟,基于STC89C51 RC电子称设计[J].电脑知识与技术,第5卷第31期.
[2]张军、宋涛,AVR单片机实用C语言程序设计实例精粹,北京:电子工业出版社,2009.1.
关键词:单片机;实例化;模块化;实验平台;教学改革
中图分类号:G642 文献标识码:B
1引言
MCS-51系列单片机因结构紧凑、指令系统灵活、成本低、开发工具普及等原因,得到了非常广泛的应用。目前几乎所有工科大专院校都开设了单片机原理及应用等课程。但多年的教学实践经验也表明,单片机原理与应用课程的教学质量较难保证,其主要原因是:传统的灌输式课堂教学方法、过多的理论课时抑制了学生学习的积极性,而较少的实验课时又使本门课程的理论和实践脱节。如何根据单片机原理与应用课程的特点,寻求一种能较好培养学生实践能力的教学方法,是每一位任课教师都应深入思考的问题。
2传统单片机教学模式的不足之处
目前,大多数单片机课程在教学内容设置和教学顺序安排方面仍然采用传统的先基础后应用的模式,即从介绍单片机的硬件结构、指令系统及寻址方式入手,然后依次讲解汇编语言程序设计、系统总线扩展及接口技术,最后介绍应用系统设计实例。在上述安排中,课堂理论教学的学时大大多于实验教学的学时,例如对于32学时的单片机原理与应用,通常实验只分配4~6学时。同时,实验环节通常安排在“汇编语言程序设计”之后才开始进行。这种教学体系的不足之处在于:
(1) 课程开始时原理性内容太多,内容较为枯燥,学生理解困难,影响学习热情;
(2) 侧重于原理知识介绍,应用系统设计及实验学时不足,不利于培养学生的实践能力;
(3) 因课时限制,程序设计语言的介绍止步于汇编语言,更常用的C51则无暇顾及;
(4) 实验系统功能固定,缺少和南京邮电大学通信类教学内容相关的实验内容,实验学时少,不利于进行较为复杂的综合性、设计性实验,使学生在构建实际的单片机应用时缺少系统化的思路。
上述几个原因中,对教学质量影响最大的原因就是实验课时不足、实验系统功能固定以及缺少通信类实验内容,不利于学生进行综合性、设计性实验,学生无法对所学知识融会贯通。同时,单片机原理与应用课程通常在第六或第七学期作为选修课开出,而此时学生由于找工作或考研等多方面因素的影响,对这些课程的重视程度不够,也使得教学效果大打折扣。
3通过实例化教学加强单片机课程的实践环节
对于单片机这类实践性较强的课程,在教学中更应该强调学以致用。为了能更好地培养学生单片机技术应用能力,激发学生的学习主动性,我们在单片机教学过程中进行了实例化教学的探索。所谓的“实例化”教学,就是把单片机课程中所要教授的各项理论知识和实践技能按由浅入深的原则分解到一个个具体的实验实例中,通过让学生在教学过程中按顺序完成这些实验来达到教学目的。在实例的设计和顺序安排上必须注意循序渐进,各部分内容既循序渐进,又互相联系,前面的实例为后续的实例打基础,后续的实例在不断引入新内容和新概念的同时,也对前面实例中提到的知识点进行适当的重复,以加深学生对教学内容的理解。
为了达到上述的教学目的,作者在主持单片机教学改革项目时,决定自行设计模块化的单片机通信接口实验平台,以配合单片机教学方式及教学内容的改革。
4单片机模块化实验系统的特点
4.1实验平台的主要特点
(1) 提供丰富的基本接口实验模块,这些模块主要通过单片机的I/O端口控制。
(2) 提供单片机总线扩展接口,用于控制功能较复杂的器件。
(3) 提供多种通信接口实验模块,如串行口、电话通信接口、网络通信接口、GSM/GPRS接口等。
(4) 选用具有IAP功能及集成MON51调试跟踪功能的CPU,下载实验代码及动态跟踪调试方便,不用仿真器,极大地降低了实验系统的成本。
(5) 实验平台上CPU可选择多种晶振频率,方便不同种类实验的需求。
(6) 大多数实验电路均实现模块化设计,学生进行实验时首先必须设计电路并动手连接,既解决了单片机在控制复杂系统时I/O端口不足的问题,又有利于通过不同模块的组合设计新的实验,也可以锻炼学生的动手能力。改变了以往很多实验系统不需要搭电路,只要运行例子代码即可完成实验的不足。
4.2实验平台的功能
本实验平台目前可进行的验证性实验约有三十多个,包括通过单片机的输入输出接口可直接完成的实验,如通过单片机控制LED、LED点阵、独立键盘、行列式键盘、数码管、E2PROM、实时钟、串行A/D、串行D/A、温度传感器、红外接收器、液晶显示器、直流电机、步进电机等,实验内容基本涵盖了单片机应用领域的各个方面,除了满足单片机原理及应用课程的课内实验的需求外,还可供学生进行课外科技创新活动使用。
除了单片机I/O端口可直接控制的接口模块之外,本实验平台还设计了单片机扩展总线接口,并在总线上接入了32K字节RAM存储器、扩展了并行输入/输出端口、串行口、电话用户线接口、以太网通信接口以及独立的GSM/GPRS模块等器件,在此基础上,可进行十多个和通信相关的实验,如单片机控制扩展串口芯片与PC机的串行通信、基于RS-485接口的多机通信、模拟电话用户摘挂机及脉冲拨号、DTMF信号的接收和识别、TCP/IP协议栈测试、GPRS数传通信、GSM短消息收发等。这些通信类实验是本实验平台的主要特色之一,包含了多种通信方式和通信协议,大部分都属于设计性和综合性实验,具有一定的趣味性和挑战性,对于培养学生的分析能力、实践能力、数据处理能力及资料查阅能力等都大有帮助。
5实验平台的硬件设计
实验平台的硬件结构框图如图1所示。
5.1实验平台CPU的选择
实验系统选择NXP公司(原Philips公司)的P89V51RD2单片机作为CPU。该CPU为8052内核,片内包含64K字节的Flash存储器、1K字节的扩展RAM,以及SPI接口、双数据指针、硬件看门狗电路及5通道的PCA电路等资源;同时该CPU还具有ISP/IAP以及在线仿真功能,可通过串行口更新应用程序代码或下载Mon51仿真代码供跟踪调试程序使用,不需要硬件仿真器即可完成各种实验代码的在线调试,功能强大,性价比高,极其适合实验类应用的需求。
CPU的串行口通过RS-232电平变换电路和实验微机的串行口相连,完成实验代码下载及在线调试工作。
5.2I/O控制类接口模块的设计
所谓I/O控制类接口,指的是可以通过单片机的并行I/O端口引脚直接控制的实验电路部分的接口。例如对于4×4行列式键盘,当采用扫描法工作时,共有4根行扫描线和4根列扫描线,在实验平台中将这8根扫描线引出到图1中所示的I/O控制接口部分。在实验时,可选择单片机P0~P3中的某个并行端口,用8芯扁平电缆将I/O控制接口部分的键盘扫描线和CPU的并行端口连接起来即可进行实验。
与键盘接口类似,实验平台中的1602字符点阵液晶显示模块、实时钟、E2PROM存储器、串行A/D、串行D/A、温度传感器、红外接收模块、8位共阴级数码管模块、可独立驱动的数码管、按键、LED、拨动开关、移位寄存器、CPLD模块、步进电机及直流电机等器件和设备都是通过单片机的I/O端口引脚直接控制的方式进行实验的,但是单片机本身的I/O端口引脚只有32根,无法同时控制所有的资源。为了解决这个矛盾,在电路设计时,将这类器件的受控引脚引出到接插件上,所有和受控引脚引出线相连的接插件就构成了I/O控制接口。在进行具体的实验时,根据实际电路的设计要求,使用两端带有接插件的扁平电缆将CPU的并行I/O端口和I/O控制接口中相应设备的受控引脚连接起来即可。各器件的供电电路、时钟电路、驱动电路等单独设计,在电路板上统一部署,无需通过I/O控制接口控制。
在实验平台的电路设计中,所有器件和设备引出的控制引脚和单片机的I/O端口引脚均已根据各自的特性进行了预处理,如上拉、下拉等,以确保未参与实验的引脚在悬空时状态的确定性,避免引起器件、设备的误动作或损坏。
5.3总线控制类接口模块的设计
在很多应用场合,MCS-51单片机片内资源不能满足要求,此时就要进行系统扩展,引出地址总线、数据总线和控制总线用于控制外部器件设备。此时单片机的P0端口在ALE信号的控制下实现时分复用,扩展为数据总线和地址总线的低8位,P2端口扩展为地址总线的高8位,P3端口的P3.6和P3.7引脚分别用于扩展总线的写选通和读选通信号。总线上可以挂接多个设备或器件,设备或器件通过地址译码选通,由CPU进行读写。
本实验平台设计了总线扩展接口(A)和(B),总线扩展接口(A)和CPU的P0~P3端口复接,总线扩展接口(B)则和地址锁存器及地址译码电路连接。当需要进行总线扩展时,通过40芯扁平电缆将电路板上的总线扩展接口(A)和(B)连接起来即可。此时单片机的P0、P2及P3.6、P3.7作为总线控制引脚使用,不可再当作普通I/O端口使用。
扩展总线使用A15对32K字节的RAM进行片选,同时通过74HC138地址译码电路提供8个地址译码输出,译码电路如图2所示。
图2中的74HC138采用读写信号相与作为使能信号之一,这样就保证了只有当单片机进行外部总线访问时才选通74HC138进行地址译码。实验平台使用这些地址译码输出选通相关的设备或器件进行读写。具体内容如表1所示。
6配套实验的设计及教学改革
6.1验证性实验
验证性实验是为了验证并巩固课程中已学习过的知识点而设计的实验。单片机本身的知识点主要在于其指令系统及内部资源如并行端口、定时器/计数器、串行口等的控制和使用。
各学校开设的单片机原理类课程的学时数基本都是32学时,其中实验学时一般在4~8学时之间,能够进行的实验的数量并不多。为此我们对教学内容及实验方式进行了改革,增加部分基础实验的实验课时,并为此设计了4~6个验证性实验的实例,例如通过I/O端口及循环延时控制LED实现跑马灯、通过定时中断控制LED实现跑马灯、独立按键的扫描、单片机串行口数据的收发等。这些实验的控制流程简单,代码量小,非常容易理解,主要侧重于单片机指令系统及单片机内部资源的使用。实例同时提供汇编语言与C语言两种版本,由老师事先调试运行完毕,在进行课内实验时,让学生直接在该实验系统上运行。由于实验代码已事先调试完毕,所以学生在短时间内可以完成所有的实验,通过对阅读实际代码、编译、连接工程、模拟调试、下载代码并执行这样一个完整的开发过程的实践,切实掌握单片机应用系统的开发流程及开发工具的使用,并能体会到机器指令、汇编语言和高级语言之间的关系,为进一步完成后续的综合性及设计性实验打下基础。为了防止学生在完成验证性实验时走过场,我们还针对每个实验设计了一些思考题,在验收实验时要求学生现场修改并执行,可充分检验出学生对实验内容的了解程度,起到督促学生认真进行实验的作用。
6.2综合性实验
综合性实验是指学生在具有一定的知识和技能的基础上,运用某一门课程中的多个知识点或多门课程的相关知识对实验技能和方法进行综合训练的一种复合型实验。
对于单片机课程而言,综合性实验一般在课程结束前进行,此时学生已经基本掌握了单片机的内部资源及外扩设备的原理,可以运用多个知识点完成综合性实验。我们准备了两个综合性实验:短消息收发终端的设计和分布式温度采集系统。短消息收发终端设计实验要求学生掌握通过单片机外扩总线扩展串行通信接口,实现扩展串行接口和单片机本身串行口之间的数据缓冲、中断式数据收发、数据包分析等功能;分布式温度采集系统实验要求学生掌握单片机多机通信的原理、多机通信环境下数据包收发的设计和实现、通过I/O端口模拟总线时序对扩展设备进行操作等知识。上述两个实验学生可按三人一个小组,任选一个完成。由于它们都引入了功能较复杂的外部设备,学生必须在课外预先进行一定的准备,锻炼了学生资料查阅能力、系统分析能力、分工合作能力及编程实践能力。
6.3设计性实验
设计性实验是指给定实验目的、要求和实验条件,由学生自行设计实验方案并加以实现的一种探索型实验。设计性实验不但要求学生综合课程中的多个知识点和各种实验原理来设计实验方案,而且要求学生能充分运用已学的知识去发现问题、解决问题。开设设计性实验的目的是让学生在实践中将相关的基础知识、基本理论得以实践、融会贯通,培养其独立发现问题、解决问题的能力,以最大限度发挥学生学习的主动性,相对于综合性实验而言,要求更高、难度更大。
对于设计性实验,我们充分利用自制实验设备丰富的系统资源,准备了十余个题目,大部分和通信相关,同时还涉及单片机内部及扩展资源的使用,例如模拟电话用户接口设计、串口/以太网转换模块设计、短信监控系统设计等。这些实验只指定了实验的基本要求和可用的资源,具体的实验方案和实际的设计过程都由学生自行完成。通过这样的实验过程,学生们可以把分散、独立的知识融会贯通,整合为一体,最大程度上了解并掌握了单片机系统开发的全过程,使学生的创新能力、设计能力及实践能力得到了充分的锻炼。
由于课时的限制,设计性实验并不要求作为课内实验完成。我们针对设计性实验进行了教学改革的尝试,鼓励学生选择一到两个设计性实验,在课程结束后的半学期内利用课外时间到开放实验室去完成。学生完成实验,提交实验报告,经实验教师检查合格后可根据实验学时获得一定的自主个性化学分,以此来激发同学们选做实验的积极性。
7结语
本文介绍的单片机实验教学系统具有以下特点:实例化的基础实验可使学生尽快掌握单片机应用系统设计思路及开发工具的使用;丰富的系统资源及资源的模块化设计可组合出较多的实验内容,并在该实验平台上实现了同时进行验证性、综合性和设计性实验的功能,提高了实验平台的性价比;在综合性、设计性实验内容的安排上偏向于通信领域各种技术的应用,符合本校的办学特色。
目前该实验系统已批量生产,首批80套设备投入使用后,经过一个学期两个大班实验教学的试点,教学效果良好,极大地提高了学生的学习兴趣及综合创新能力。
参考文献:
[1] 倪志莲. 单片机课程的实验教学改革[J]. 实验室研究与探索,2006,25(7):843-844.
[2] 陈亮. 单片机课程的教学改革[J]. 实验室研究与探索,2008,27(9):121-123.
[3] 廖平. 单片机实验教学的改革[J]. 实验室研究与探索,2004,23(7):36-38.
[4] 马忠梅. 单片机的C语言应用程序设计[M]. 北京:北京航空航天大学出版社,2003.
[5] 焦振宇. 浅谈新形势下我国高校单片机教学的课程改革[J]. 高教论坛,2005,2(1):102-105.
南京大学BBS小百合上出现了一段趣闻:腾讯高级执行副总裁兼首席信息官许晨晔于1996年硕士毕业于南京大学计算机系;奇虎360副总裁为南京大学软件学院硕士。大家笑称,原来360与腾讯之争还是南京大学软件学院与计算机学院之争啊。
在2000年的“网络泡沫”破裂之后,IT行业渐渐恢复了作为一个行业应有的冷静和平和,也逐渐退出了人们关注的视线。而今年一场莫名而来的“3Q大战”似乎又重新将这个行业推到了中国大众的眼前。而这仅仅是一个让更多人去关注这个行业的契机――其实他已经默默地影响着我们每一天的生活。从小巧可爱的MP3到关系民生的银行系统,再到载人航天的宇宙飞船,到处都有IT行业的身影。
IT行业在大学中的相关专业并不是像想象中的只有计算机科学等少数几个专业,额外的专业还有软件工程、信息工程、信息安全等很多专业,尤以计算机科学和软件工程最具典型性。软件工程和计算机科学在学科的划分上,并不属于同一个科目。软件工程隶属于工科类,而计算机科学更多地属于理科类。他们虽然在大多数人眼中有着极大的相似之处,却在千丝万缕的联系中包含着巨大的差异。
优雅学院派:计算机科学与技术
计算机科学与技术专业培养具有良好的科学素养,系统地、较好地掌握计算机科学与技术包括计算机硬件、软件与应用的基本理论、基本知识和基本技能与方法,能在科研部门、教育单位、企业、事业、技术和行政管理部门等单位从事计算机教学、科学研究和应用的计算机科学与技术学科的高级科学技术人才。他是研究计算机及其周围各种现象和规律的科学,亦即研究计算机系统结构、程序系统(即软件)、人工智能以及计算本身的性质和问题的学科。其学科的重点并非是软件的构建,而是计算原理本身。而计算机也好,软件本身也好,只是计算的实现。
与其说计算机专业是优雅的学院派,还不如说计算机科学与技术在IT行业中起着高屋建瓴、提纲挈领的作用。学院派需要的是潜心对计算机专业的研究和分析,具有一定的创造性和启发性。在行业内部,计算机系毕业的学生大多数成为技术高层的架构师。
主要课程:电路原理、模拟电子技术、数字逻辑、数字分析、计算机原理、微型计算机技术、计算机系统结构、计算机网络、高级语言、汇编语言、数据结构、操作系统、计算方法、离散数学、概率统计、线性代数以及算法设计与分析等。主要实践性教学环节包括电子工艺实习、硬件部件设计及调试、计算机基础训练、课程设计、计算机工程实践、生产实习、毕业设计(论文)。
就业方向:学生毕业后可以到国内外众多软件企业、国家机关以及各个大、中型企、事业单位的信息技术部门、教育部门等单位从事软件工程领域的技术开发、教学、科研及管理等工作。也可到信息产业、财政、金融、邮电、交通、国防、大专院校和科研机构从事通信技术和电子技术的科研、教学和工程技术工作。
推荐学府:北京大学、清华大学、北京航空航天大学、哈尔滨工业大学、上海交通大学、南京大学、国防科学技术大学等。
行业实干家:软件工程
软件工程,顾名思义是以工程为主,是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。其学科在学习构建软件的基础上,更加重视工程化的方法,希望能够以传统的工程,如建筑工程、化学工程的方式去构建软件产品。其学生在学习基本的语言基础上,还要学量的软件工程的实践方法学,以期在实践中指导他们的工作,在设计实现软件过程中发挥作用。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面,典型的软件比如有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。
软件工程的毕业生在IT行业中常常扮演着实干家的角色,考验的是将各种想法到实际的转化的能力。比如从美国的IT职业分布中明显可以看出,中下层的工程师都是以软件工程的本科生和研究生为主,所以想要学习软件工程专业的学子们应该有一个对未来职业前瞻性的定位,这样有利于自己的职业生涯规划。
主要课程:外语、高等数学、线性代数、高等代数、电子技术基础、离散数学、计算机引论(C语言)、数据结构、C++程序设计、c#程序设计、JAVA程序设计、Delphi程序设计、汇编语言程序设计、算法设计与分析、计算机组成原理与体系结构、数据库系统、计算机网络、软件工程、软件测试技术、软件需求与项目管理、软件设计实例分析、CMM/ISO9000、Asp等。
就业方向:本专业学生毕业后可以从事各级各类企事业单位的办公自动化处理、计算机安装与维护、网页制作、计算机网络和专业服务器的维护管理和开发工作、动态商务网站开发与管理、软件测试与开发及计算机相关设备的商品贸易等方面的有关工作。
推荐学府:北京大学、北京交通大学、重庆大学、大连理工大学、东南大学、山东大学、西安交通大学、中南大学、西安邮电大学等。
时代尖兵:信息工程
专业信息工程专业是建立在超大规模集成电路技术和现代计算机技术基础上,研究信息处理理论、技术和工程实现的专门学科。该专业以研究信息系统和控制系统的应用技术为核心,在面向21世纪信息社会化的过程中具有十分重要的地位。信息工程专业对数学、物理、电路理论、信号理论、电子技术、计算机科学和技术等方面的知识有很高的要求,并紧跟当今发展最迅速的信息与通信工程以及控制科学与工程学科领域的最新技术,不断更新教学内容,形成风格独特的课程体系。因此说信息工程是时代的尖兵一点都不过分。
总体来说,计算机专业和软件专业在过去IT行业的发展中已经奠定了自己的基础地位,而信息工程则决定了这个行业是否走在了时代最前端,决定了这一行业能成为先锐科技及先锋科学。
主要课程:电路与系统、信息论、编码理论、微型计算机原理、软件工程基础、现代控制原理、通信系统原理、信息网络基础、数据采集、数字信号与信息处理等。主要实践性教学环节:包括计算机上机训练、课程设计、信息系统认识实习、生产实习、毕业设计等,一般安排30周以上。主要专业实验:至少完成本专业方向的一组实验,例如:通信系统原理实验、信息网实验。
中图分类号:TN911-34文献标识码:A
文章编号:1004-373X(2010)16-0166-03
SD Card Reader Platform Based on Single Chip and Serial Port
LIU Run
(Physics Department, Qinghai Normal University, Xining 810008, China)
Abstract: the SD memory card is applied widely with modern electronics technology. Due to an interface can only be connected to the same kind of equipment in the traditional underlying hardware architecture, which is a waste of resources. A scheme of using AVR microcontroller and serial transfer through the USB interface to read SD card data, the bi-directional reading through a variety of microcontrollers and computer peripherals is achieved, the external devices are compatible by improving the read method of conventional file system, which improves the utilization of existing resources and portability, the storage information can be managed through the microcontroller and the computer. The experiment proves the success rate of a single reading can reach 99.8%, therefore, the stability and security of the data read is guaranteed.Keywords: serial port; SD card; MCU; USB interface
0 引 言
SD卡[1](secure digital memory card,安全数码卡)是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2 g,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。
本文正是通过AVR单片机经过软硬结合的设计方案,来读取SD卡上FAT32文件系统中的数据,FAT32是微软公司开发的新一代的文件系统,支持更大的存储容量和长达255个字符的文件名,也可以通过串口转USB接口芯片通过计算机来访问存储器中的数据,从而实现多渠道的立体的访问方式,进一步提升了资源的利用率。
1 文件系统
1.1 FAT文件系统简介
文件配置表(FAT)[2]是一种由微软公司发明的并带有部分专利的文件系统,供MS-DOS使用,也是非NT内核的微软窗口使用的文件系统。FAT文件系统考虑当时计算机效能有限,所以未被复杂化,因而被几乎所有个人计算机的操作系统支持。这些特性使它成为理想的软盘和记忆卡的文件系统。但FAT有一个严重的缺点:当文件被删除并且在同一位置被写入新数据,他们的片段通常是分散的,减慢了读写速度。磁盘碎片重整是一种解决方法,但必须经常重组来保持FAT文件系统的效率。
1.2 FAT文件系统升级版
FAT32实际上是文件分区表采取的一种形式,它是相对于FAT16而言的。它可以大大地节约磁盘空间。文件在磁盘上是以簇的方式存放的,簇里存放了┮桓霆文件就不能再存放另外的文件。
FAT32最大的优点是可以支持的磁盘大小达到2 TB(2 048 GB),但是不能支持小于512 MB的分区。由于采用了更小的簇,FAT32文件系统可以更有效率地保存信息。FAT32可以更高效地使用空间。FAT32使用较小的簇(即,对于大小在8 GB以内的驱动器,使用4 KB的簇),这与大的FAT或FAT16驱动器相比,可将磁盘空间的使用率提高10%~15%。
FAT32 更稳定可靠。FAT32 可以重新定位根文件夹,而且它使用文件分配表的备份副本,而不是使用默认副本。此外,FAT32驱动器上的引导记录也得到扩展,包括了关键数据结构的备份副本。因此,与现有的 FAT16 驱动器相比,FAT32 驱动器不容易受单点故障的影响。
FAT32更灵活。FAT32驱动器上的根文件夹是普通的簇链,因此它可以位于驱动器上的任何位置。以前对根文件夹数量的限制不复存在。此外,可以禁用文件分配表镜像,这样就可以让文件分配表的副本而不是让第一个文件分配表处于活动状态。这些功能允许您动态重调 FAT32 分区的大小。
2 硬件设计
2.1 芯片概述
ATmega32[3]是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega32 的数据吞吐率高达1 MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。 ATmega32 AVR 内核具有丰富的指令集和32 个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问2个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10倍的数据吞吐率。
PL2303用于实现USB 和标准RS 232串行端口[4]之间的转换,2个独立的大型缓冲用于两种总线的连接,大型数据缓冲器用于USB 的批量数据传输,自动握手模式可用于串行通讯,因而可以达到远大于标准UART 控制器的波特率。PL2303 支持USB 电源管理和远程唤醒协议。本设计中PL2303芯片主要应用在将主控单元的下载线与供电模块合二为一,大大简化了系统的设计复杂度。
NOKIA 5110液晶显示器,传统的点阵式液晶显示器,不内置英文及汉字字库,因此NOKIA 5110液晶显示的过程,需要单片机把从存储器中读取到的ASCII码值转换成对应的英文及汉字点阵信息,然后通过串口把点阵信息传输到液晶显示器上进行显示。
2.2 硬件设计
硬件单元包括: AVR[5]主控ATmega32单元模块,SD卡接口模块,液晶显示接口模块,串口转USB接口。
2.2.1 主控电路设计
主控电路(如图1所示)主要负责将从输入接口中读到的数据转换成对应的字模码。
2.2.2 存储系统模块及下载接口设计
SD卡接口如图2所示。
图1 主控电路
图2 SD卡接口电路
2.2.3 液晶显示模块设计
液晶显示接口如图3所示。
图3 液晶显示接口
2.2.4 USB转换接口模块设计
计算机端串行转USB接口[5]的设计如图4所示。
图4 计算机端串行转USB接口设计
3 软件设计
系统软件设计主要包括AVR单片机主控程序,中断服务控制子程序,LCD[6]控制子程序,编码转化子程序等几个模块。单片机端程序运行流程如图5所示,计算机端运行程序流程如图6所示。
4 总结及展望
由于本设计中采用的都是一些通用器件,是对通用器件的一次尝试性扩展应用,通过LCD设计的人机接口实现设备的友好操作,能够通过单片机和计算机进行双向立体式的读写,能够实现在线的实时的FAT32[7]文件系统资源管理,因此本系统具有一定社会价值和应用价值。
图5 单片机端程序运行流程图
图6 计算机端运行程序流程图
参考文献
[1]SD Memory Card Specifications.
[2]陈春,徐建华,陈柏润.计算机GBK汉字输入法速查字典[M].北京:科学出版社,2008.
[3]刘海成.AVR单片机原理及测控工程应用[M].北京:北京航空航天大学出版社,2008.
[4][美] 安格斯生,精英科技.串行端口大全[M].Jan Axelson,译.北京:中国电力出版社,2001.
[5]张军,宋涛.AVR单片机C语言程序设计实例精粹[M].北京:电子工业出版社,2009.
[6]孙俊喜.LCD驱动电路、驱动程序设计及典型应用[M].北京:人民邮电出版社,2009.
[7]关硕,关济实.FAT16文件系统在单片机存储系统上的实现[J].科技信息,2008(3):24-26.
[8]薛园园,赵建领.USB应用开发实例详解华清远见嵌入式培训中心[M].北京:人民邮电出版社,2009.