




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录一、设计要求:11.单片机课程设计要求12.C语言课程设计要求1二、设计的作用、目的1三、课题分析1四、设计的具体实现2一、单片机课程设计2二、C语言课程设计5五、程序运行背景:13六、调试问题及解决方法:141.单片机课程设计142.C语言课程设计14七、心得14八、参考资料 :15附:源程序及调试结果15一、单片机课程设计:15二、C语言课程设计:22一、设计要求:1.单片机课程设计要求(1)用Proteus仿真实现一个测量开关的闭合时长并用数码管显示出来。(2)测量范围从0ms60s。(3)支持测量结果手动复位。(4)用Keil C51编程实现上述功能(5)用Keil与Proteus联调,自动或手动改写显示内容,要求显示稳定2.C语言课程设计要求(1)要求利用C语言面向过程的编程思想来完成系统的设计; (2)突出C语言的函数特征,以多个函数实现每一个子功能; (3)画出功能模块图; (4)进行简单界面设计,能够实现友好的交互; (5)具有清晰的程序流程图和数据结构的详细定义; (6)熟练掌握C语言对文件的各种操作。二、设计的作用、目的通过程序设计,提高编程兴趣与编程水平。1.设计一个由单片机控制的按键测量时长系统,数码管显示并手动复位。通过对此程序的设计熟练掌握c语言。2.设计一个学生成绩管理系统,上学期的本班的学习成绩进行管理,可以用数组设计这个程序,具有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件。通过对此程序的设计熟练掌握c语言。三、课题分析1.动态数码管显示,通过扫描返回键值,选择其中一个按键作为清零键,用定时器定1ms并计数。2.输入N个学生的学号和每个学生考试三门功课(数学、英语、计算机基础)的成绩。编程计算出每个学生的总分和平均分,并按学生成绩优劣排序。要求:含有:登记学生资料、删除学生资料、查询学生资料、修改学生资料、保存学生资料、退出系统等各项功能。四、设计的具体实现一、单片机课程设计1、组成模块(1)定时函数,程序如下: SCON=0x00; TMOD=0x90;TH1=(65536-900)/256; TL1=(65536-900)%256; (2) 分解测量时长用于显示,程序如下: h=p%10; j=p/10; g=j%10; j=j/10; f=j%10; j=j/10; e=j%10; j=j/10; d=d%10; j=j/10; c=j%10;(3)显示函数,将当前所调节的数字显示出来,程序如下:void disp_num( ) LED(Seghour/10,Bit0); delay(2);LED(Seghour%10,Bit1); delay(2);LED(Seg17,Bitb);delay(2); LED(Seg18,Bit2); delay(2); LED(Segmin/10,Bit3); delay(2); LED(Segmin%10,Bit4); delay(2); LED(Seg18,Bit5); delay(2); LED(Segsec/10,Bit6); delay(2);LED(Segsec%10,Bit7); delay(2);开始2.流程图初始化并开始计时按键并测时长 是否松开按键 是计数得出按键时间动态刷新送给数码管每一位分解测量时间显示当前时间二、C语言课程设计1、系统的组成模块结构及功能(1)当前学生信息:通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和计算机等等相关信息,并且通过cin函数来进行给当前学生输入初始信息.具体使用的程序结构如下:printstart(); printc(); printe(s); printstart(); printf(n); return; s=s-next; p=(Node *)malloc(sizeof(Node); strcpy(p-data.num,num); printf(请你输入姓名:); scanf(%s,); getchar(); printf(请你输入性别:); scanf(%s,p-data.sex); getchar(); printf(请你输入c语言成绩:); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入数学成绩:); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入英语成绩:); scanf(%d,&p-data.egrade); getchar(); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle / 3; /* 信息输入已经完成 */ (2)、学生成绩查询: 输入一个学号, 在文件中查找此学生, 若找到则输出此学生的全部信息和成绩; 若找不到则输出查找失败的信息. 同时也可以全部把各科的平均成绩,最高和最低分输出。使用的函数结构:void Qur(Link l) /* 查询学生 */ int sel; char findmess20; Node *p; if(!l-next) printf(n=提示:没有资料可以查询!n); return; printf(n=1按学号查找n=2按姓名查找n); scanf(%d,&sel); if(sel=1)/* 学号 */ printf(请你输入要查找的学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(tttt查找结果n); (3)、学生资料删除:输入要删除的学生学学号,若找到则根据提示进行删除;若找不到则提示没有资料删除。使用的函数结构:void Del(Link l) /* 删除 */ int sel; Node *p,*r; char findmess20; if(!l-next) printf(n=提示:没有资料可以删除!n); return; printf(n=1按学号删除n=2按姓名删除n); scanf(%d,&sel); if(sel=1) printf(请你输入要删除的学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该学生已经成功删除!n); shoudsave=1; (4)、学生资料修改:输入要修改的学生号,若找到则输入新的学生信息,并提示资料修改成功;若找不到则输出查找失败的信息。使用的程序结构:void Modify(Link l) Node *p; char findmess20; if(!l-next) printf(n=提示:没有资料可以修改!n); return; printf(请你输入要修改的学生学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(请你输入新学号(原来是%s):,p-data.num); scanf(%s,p-data.num); printf(请你输入新姓名(原来是%s):,); scanf(%s,); getchar(); printf(请你输入新性别(原来是%s):,p-data.sex); scanf(%s,p-data.sex); printf(请你输入新的c语言成绩(原来是%d分):,p-data.cgrade); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入新的数学成绩(原来是%d分):,p-data.mgrade); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入新的英语成绩(原来是%d分):,p-data.egrade); scanf(%d,&p-data.egrade); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle/3; printf(n=提示:资料修改成功!n); (5)、学生成绩的排序,并统计单科的最高分。(6)、退出系统。2、系统程序流程图退出系统登记学生资料修改学生资料保存学生资料删除学生资料查询学生资料开始图1.1 总流程图开始输入学生学号是否存在转为修改新建结束 图1.2 登记学生资料 输入是否合法按学号查询?退 出输入学号按姓名查询显示结果输入姓名显示结果开始结束图1.3 查询学生资料删除的是否合法选择1?输入删除学生学号输入删除学生姓名删除成功退 出开始结束 图1.4 删除学生资料输入是否存在输入学生新信息修改成功退 出输入要修改的学生学号开始结束 图1.5 修改学生资料文件是否存在输入文件新信息导入成功是否创建文件退 出是否保存?保存成功退 出开始结束 图1.6 保存文件与退出系统3、重要函数介绍数据输入函数“cin( )” 查看数据函数“lookdata( )” 插入数据的函数“insert( )” 查看数据的函数“find( )” 更新数据的函数“update( )” 保留数据函数“save( )” 主函数 main()利用无限次循环for(;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。初始化函数 STUDENT *init()这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!菜单选择函数 int menu_select();这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!输入记录函数 STUDENT *create()这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。算法:先声明一个首节点head,并将head-next设为NULL。每输入一个数据就声明一个新节点p,把p-next设为NULL,并且链接到之前列表的尾端。在定义数据类型时,由于学生成绩管理信息需要由不同类型的数据反映出来。如:姓名、性别都需要用char型数据,而学号和成绩则需要用int型数据,并且每位同学的以上信息都需要一次性输入,所以采用结构体类型定义。如:typedef struct student /*定义结构体*/ char name 20; - 定义char型姓名int num10; - 定义int型学号char sex - 定义char型性别 intcgrade; - 定义int型英语成绩 int mgrade; - 定义int型数学成绩int egrade; - 定义int型计算机成绩totle; struct student *next; - 结构体指针 stu;五、程序运行背景:1.单片机运行背景为keil和proteus的联调,keil用于编程,proteus用于仿真。2.C语言的运行环境为VC+。六、调试问题及解决方法:1.单片机课程设计 按键过程中,存在消抖的问题,采用的是在主函数里加上延时函数,并同时显示当前的数字。2.C语言课程设计问题一、学生初始信息模块:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算计相关信息;可用函数cin(stu *p1)来实现此操作。当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。解决办法及步骤:1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错3、输出用于循环检查语句中的学生信息,发现乱码4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。问题二、查询模块:可用stu *lookdata(stu *p1) 来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。 解决办法及步骤:1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。七、心得通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!八、参考资料 : 1.秦友淑、曹化工.C语言程序设计教程.华中科技大学出版社.2.郭翠英.C语言课程设计案例精编.中国水利水电出版社.6.张毅刚.单片机原理及应用M.北京:北京邮电出版社,2008.附:源程序及调试结果一、单片机课程设计:1. 源程序:#include#define uchar unsigned char#define unit unsigned int uchar code Seg17=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x00; /*数码表*/uchar code bitcode=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0; unsigned int p=0,k=0,j=0,m=0,n=0,x=0;sbit key1=P20; sbit key2=P21;void delay(uchar tt) /*延迟*/ uchar i; for(;tt0;tt-) for(i=0;i200;i+); void LED(uchar d1,uchar d2) /*显示*/INT0=0; SBUF=d2; while(!TI); TI=0; SBUF=d1; while(!TI); TI=0; INT0=1; void display(a,b,c,d,e,f,g,h) LED(Sega,bitcode0); delay(1); LED(Segb,bitcode1); delay(1); LED(Segc,bitcode2); delay(1); LED(Segd,bitcode3); delay(1); LED(Sege,bitcode4); delay(1); LED(Segf|0x01,bitcode5); delay(1); LED(Segg,bitcode6); delay(1); LED(Segh,bitcode7);delay(1); void main() SCON=0x00; TMOD=0x90;TH1=(65536-900)/256; TL1=(65536-900)%256; while(1) TR1=!key1; while(!key1) p+;if(p=60000) p=0;TH1=(65536-900)/256; TL1=(65536-900)%256;TF1=0; h=p%10; j=p/10; g=j%10; j=j/10; f=j%10; j=j/10; e=j%10; j=j/10; d=d%10; j=j/10; c=j%10;display(a,b,c,d,e,f,g,h);if(key2=0) a=0;b=0;c=0;d=0;e=0;f=0;g=0;h=0;p=0; display(a,b,c,d,e,f,g,h);2. 调试结果上电初始化测量按键时间 手动清零二、C语言课程设计:1. 源程序:#include #include #include int shoudsave=0; struct student char num10;/* 学号 */ char name20; char sex4; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime10;/* 最近更新时间 */ ; typedef struct node struct student data; struct node *next; Node,*Link; void menu() printf(*); printf(t1登记学生资料ttttt2删除学生资料n); printf(t3查询学生资料ttttt4修改学生资料n); printf(t5保存学生资料ttttt6统计最高成绩n); printf(t7学生资料排序ttttt8显示学生成绩n); printf(t0退出系统n); printf(*n); void printstart() printf(-n); void Wrong() printf(n=提示:输入错误!n); void Nofind() printf(n=提示:没有找到该学生!n); void printc() /* 本函数用于输出中文 */ printf( 学号t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分n); void printe(Node *p)/* 本函数用于输出英文 */ printf(%-12s%st%st%dt %dtt%dt%dt%dn,p-data.num,,p-data.sex,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.totle,p-data.ave); Node* Locate(Link l,char findmess,char nameornum) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */ Node *r; if(strcmp(nameornum,num)=0) /* 按学号查询 */ r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,name)=0) /* 按姓名查询 */ r=l-next; while(r!=NULL) if(strcmp(,findmess)=0) return r; r=r-next; return 0; void Add(Link l) /* 增加学生 */ Node *p,*r,*s; char num10; r=l; s=l-next; while(r-next!=NULL) r=r-next; /* 将指针置于最末尾 */ while(1) printf(请你输入学号(以0返回上一级菜单:); scanf(%s,num); if(strcmp(num,0)=0) break; while(s) if(strcmp(s-data.num,num)=0) printf(=提示:学号为%s的学生已经存在,若要修改请你选择4 修改!n,num); printstart(); printc(); printe(s); printstart(); printf(n); return; s=s-next; p=(Node *)malloc(sizeof(Node); strcpy(p-data.num,num); printf(请你输入姓名:); scanf(%s,); getchar(); printf(请你输入性别:); scanf(%s,p-data.sex); getchar(); printf(请你输入c语言成绩:); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入数学成绩:); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入英语成绩:); scanf(%d,&p-data.egrade); getchar(); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle / 3; /* 信息输入已经完成 */ p-next=NULL; r-next=p; r=p; shoudsave=1; void Qur(Link l) /* 查询学生 */ int sel; char findmess20; Node *p; if(!l-next) printf(n=提示:没有资料可以查询!n); return; printf(n=1按学号查找n=2按姓名查找n); scanf(%d,&sel); if(sel=1)/* 学号 */ printf(请你输入要查找的学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else if(sel=2) /* 姓名 */ printf(请你输入要查找的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else Wrong(); void Del(Link l) /* 删除 */ int sel; Node *p,*r; char findmess20; if(!l-next) printf(n=提示:没有资料可以删除!n); return; printf(n=1按学号删除n=2按姓名删除n); scanf(%d,&sel); if(sel=1) printf(请你输入要删除的学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该学生已经成功删除!n); shoudsave=1; else Nofind(); else if(sel=2) printf(请你输入要删除的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该学生已经成功删除!n); shoudsave=1; else Nofind(); else Wrong(); void Modify(Link l) Node *p; char findmess20; if(!l-next) printf(n=提示:没有资料可以修改!n); return; printf(请你输入要修改的学生学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(请你输入新学号(原来是%s):,p-data.num); scanf(%s,p-data.num); printf(请你输入新姓名(原来是%s):,); scanf(%s,); getchar(); printf(请你输入新性别(原来是%s):,p-data.sex); scanf(%s,p-data.sex); printf(请你输入新的c语言成绩(原来是%d分):,p-data.cgrade); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入新的数学成绩(原来是%d分):,p-data.mgrade); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入新的英语成绩(原来是%d分):,p-data.egrade); scanf(%d,&p-data.egrade); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle/3; printf(n=提示:资料修改成功!n); shoudsave=1; else Nofind(); void Disp(Link l) /*显示*/ int count=0; Node *p; p=l-next; if(!p) printf(n=提示:没有资料可以显示!n); return; printf(tttt显示结果n); printstart(); printc(); printf(n); while(p) printe(p); p=p-next; printstart(); printf(n); void Tongji(Link l) Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */ Node *r=l-next; if(!r) printf(n=提示:没有资料可以统计!n); return ; pm=pe=pc=pt=pa=r; while(r!=NULL) if(r-data.cgrade=pc-data.cgrade) pc=r; if(r-data.mgrade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.egrade) pe=r; if(r-data.totle=pt-data.totle) pt=r; if(r-data.ave=pa-data.ave) pa=r; r=r-next; printf(-统计结果-n); printf(总分最高者:t%s %d分n,,pt-data.totle); printf(平均分最高者:t%s %d分n,,pa-data.ave); printf(英语最高者:t%s %d分n,,pe-data.egrade); printf(数学最高者:t%s %d分n,,pm-data.mgrade); printf(c语言最高者:t%s %d分n,,pc-data.cgrade); printstart(); void Sort(Link l) /*排序*/ Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node); /* 用于做新的连表 */ ll-next=NULL; if(l-next=NULL) printf(n=提示:没有资料可以排序!n); retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年反射疗法师大赛理论能力提升B卷题库【完整版】附答案详解
- 2025年医学研究方法学统计分析试题答案及解析
- 2025年自考专业(人力资源管理)经典例题及答案详解【必刷】
- 农发行宜宾市珙县2025秋招结构化面试15问及话术
- 2025年临床执业医师模拟题库附答案详解(培优)
- 全面监控方案制定
- 地产项目施工安全预案
- 小区环境维护与管理
- 学霸的学习方法大公开
- 妇女生殖健康保护规程
- 2025年度反洗钱阶段考试培训试考试题库(含答案)
- 收割芦苇施工方案
- 普通黄金现货购买合同8篇
- 三力测试考试题库及答案视频讲解
- 2025年河南省人民法院聘用书记员考试试题及答案
- 2025年中学教师资格考试《综合素质》核心考点与解析
- 口腔冠延长术
- 部编版七年级语文上册《闻王昌龄左迁龙标遥有此寄》课件
- 诊所经营管理课件
- 2024年江苏省连云港市辅警协警笔试笔试模拟考试(含答案)
- 铁路工务介入管理办法
评论
0/150
提交评论