电子称C语言程序
- 格式:doc
- 大小:59.00 KB
- 文档页数:8
《C语言程序设计》课程标准1.课程定位和课程设计1.1课程性质与作用《C语言程序设计》课程是电子信息类专业的专业基础课程,通过本课程的学习,使学生具备初步的计算机编程思想、编程基本技能及逻辑思维能力,掌握运用C语言编程来解决岗位工作中实际问题的方法和步骤,为提高职业能力和拓展职业空间打下坚实基础。
在课程体系中,该课程的定位主要在于培养学生的基本编程能力和程序设计思想,为后续编程类课程打下良好的基础。
本课程的前导课程有《计算机基础》,根据不同专业方向,后续课程会涉及《单片机应用》、《数控技术》、《数据结构》、《C#程序设计》、《Java程序设计》及其它编程语言类课程。
同时也是信息产业部计算机专业和软件专业水平资格考试(程序员级别)考试中要求的主要程序设计语言。
1.2课程设计的理念和思路《C语言程序设计》课程将工程应用能力和职业素质的培养放在首位,采用教学做一体化的课程教学方式,在教、学、做的过程中明确必要的理论知识,同时深化和拓展课程所需要掌握的能力要求。
主要体现在以下几个方面:(1)课程注重知识描述方式与学生接受能力的统一。
课程内容应淡化传统意义上的理论说教,对于教学内容力求以浅显易懂的文字结合图表的方式说明。
同时对于知识点的讲解应由案例或问题引入,进而引出需要掌握的知识点,使学生在潜移默化的过程中掌握课程内容。
(2)教学案例的选取注重知识性与趣味性的统一。
在案例选择方面,应选择贴近生活的现实性案例,在学习知识的同时,融入趣味性,寓教于乐。
(3)教学设计中注重教师引领作用与学生主体地位的统一。
课程教学设计中,应注重师生互动环节的设计,提高学生的参与程度,突出学生主体地位,提升学生学习品质。
(4)教学实施中注重基础性素质培养与发展性思维培养的统一。
课程教学以基础性素质培养为主,同时为适应不同学生群体的需要,应设置必要的知识拓展,对学生给与必要的知识补充,以丰富学生的知识量,培养和拓展编程思维。
2.课程目标经过该课程的学习,学生应具备初步的计算机编程基本思想、编程基本技能及逻辑思维能力,掌握运用C语言编程来解决岗位工作中实际问题的方法和步骤。
百度文库- 好好学习,天天向上传感课程设计报告基于单片机的电子秤设计目录目录 (1)摘要 (1)关键字:电子秤、应变片、A/D转换器,显示电路 (1)一、系统整体描述 (1)二、系统模块设计 (2)电阻应变式传感器的组成以及原理 (2)直流差动电桥检测电路 (3)放大电路 (5)A/D转换 (7)单片机系统 (7)三、数据处理及程序的设计 (9)数据处理及程序的设计 (9)参数整定 (10)测量数据及误差分析 (10)曲线拟合及参数整定 (10)显示子程序的设计 (13)总结 (13)参考文献 (14)附录1程序 (15)摘要本文设计的电子秤以单片机为主要部件,用C语言进行软件设计,硬件则以半桥传感器为主,测量0~500g电子秤,随时可改变上限阈值,本课程设计的电子秤以单片机为主要部件,利用差动半桥测量原理,通过对电路输出电压和标准重量的线性关系,建立具体的数学模型,将电压量纲(V)改为重量纲(g)即成为一台原始电子秤。
其中测量电路中最主要的元器件就是电阻应变式传感器。
电阻应变式传感器是传感器中应用最多的一种。
芯片HX711-BF的A/D转换的作用是把模拟信号转变成数字信号,进行模数转换,然后把数字信号输送到显示电路中去,最后由显示电路显示出测量结果。
关键字:电子秤、应变片、A/D转换器,显示电路一、系统整体描述系统由敏感元件、电桥测量电路、放大电路、模数转换电路、单片机最小系统、显示电路构成。
敏感元件产生物理量变化,由测量电路将信号转换为电信号,并放大输出。
通过模数转换后将信号输入单片机中,经过处理后由显示电路显示。
二、系统模块设计电阻应变式传感器的组成以及原理电阻应变式传感器是将被测量的力,通过它产生的金属弹性变形转换成电阻变化的元件。
由电阻应变片和测量线路两部分组成。
常用的电阻应变片有两种:电阻丝应变片和半导体应变片,本设计中采用的是电阻丝应变片,为获得高电阻值,电阻丝排成网状,并贴在绝缘的基片上,电阻丝两端引出导线,线栅上面粘有覆盖层,起保护作用。
下面介绍主程序编写,其他程序略。
(1) 头文件和一些宏定义#include <>#include <>#include <>#include ""#include ""#include "";;int2str(j,str1);if (j<10){ display_GB2312_string(3,84,"00");display_GB2312_string(3,100,str1);}else if (j<100){ display_GB2312_string(3,84,"0");display_GB2312_string(3,92,str1);}else{ display_GB2312_string(3,84,str1);}};13(确定价格)void KeyPress(uchar keycode){ switch (keycode){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:..");To_Zero();display_GB2312_string(1,1,"电子秤初始化成功"); display_GB2312_string(3,1,"重量: kg");display_GB2312_string(5,1,"单价: 元");display_GB2312_string(7,1,"金额: 元");Display_Price();while(1){ //每秒称重一次if (FlagTest==1){//称重,得到重量值weight,单位为gAdVal=ReadCount();weight=FullScale-AdVal/1000;if (weight>0x8000) weight=0;weight=10000*weight/FullScale;weight=weight*RATIO;//如果超量程,则报警if (weight >= 10000){ beep = 0;alert = 0;display_GB2312_string(3,60,"------");display_GB2312_string(7,44,"--------");}//如果不超量程else{ beep = 1;alert = 1;//显示重量值Display_Weight();//如果单价设定好了,则计算价格if (FlagSetPrice == 1){ money = weight*price/1000; //money单位为分//显示总金额Display_Money();}else{ display_GB2312_string(7,44," ");}//清测试标志FlagTest = 0;}}//获取按键keycode = Getkeyboard();//有效键值0-15if ((keycode<16)&&(FlagKeyPress==0)){ FlagKeyPress = 1;KeyPress(keycode);FlagKeyPress = 0;}delay(20);}}。
#include<AT89X52.H>#define uint unsigned int#define uchar unsigned charunsigned char key2;bit ding=1;unsigned char Getkey(void);uchar a,n=0,shi,fen,miao;void delay01s(void);uchar LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar LED1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//有小数点的void init(); //函数声明void Delay(unsigned char z);//函数声明void display(); //函数声明//函数声明void main() //函数声明{P1=0xfe;//对P1口赋初值init(); //函数调用while(1){//函数调用key2=Getkey();switch(key2){case 1:shi++;if(shi==24){shi=0;}break;case 2:fen++;if(fen==60){fen=0;}break;case 3:if(fen!=0)fen--;if(fen==24){fen=0;}break;case 4:ding=~ding;default:break;}display(); //函数调用}}void init(){TMOD=0x01; //定时器工作方式选择和赋初值TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1; //开总中断ET0=1; //开定时器中断TR0=1; //启动定时器}void timer0() interrupt 1 //中断服务程序{if(ding==1){TH0=(65536-50000)/256;//中断时间50msTL0=(65536-50000)%256; //定时器重新赋初值a++;if(a==10){n=~n;}if(a==20){n=~n;a=0;P1=P1<<1|P1>>7;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}}}}}}void display()//显示程序{P0=LED[shi/10];P2=((P2&0x0f)|0x70); Delay(4);if(n==0){P0=LED[shi%10];}else{P0=LED1[shi%10];}P2=((P2&0x0f)|0xb0);Delay(4);P0=LED[fen/10];P2=((P2&0x0f)|0xd0);Delay(4);P0=LED[fen%10];P2=((P2&0x0f)|0xe0);Delay(4);}/**********获得键值子程序**********************/ unsigned char bool;//bool 是否松键的标志unsigned char Getkey(void){unsigned char temp,key=0;P2=(P2&0xff)|0x0f;if((P2&0xff)!=((P2&0xff)|0x0f)) // 有键按下{//delay01s();if(((P2&0xff)!=((P2&0xff)|0x0f)) &&(bool==0)) // 有键按下{temp=~(P2|0xf0);if(temp==1) key=1;else if(temp==2) key=2;else if(temp==4) key=3;else if(temp==8) key=4;bool=1;}}if(((P2&0xff)==((P2&0xff)|0x0f)) &&(bool==1)){bool=0;}return key; //返回1~16键值}/********延时程序******/void delay01s(void){unsigned char j,k;for(j=5;j>0;j--) //198{for(k=15;k>0;k--)//248{;}}}void Delay(unsigned char z){unsigned char i,j,k; //定义变量for(i=z;i>0;i--)for(j=25;j>0;j--)for(k=20;k>0;k--);}#include<reg52.h>//头文件#define uchar unsigned char//宏定义#define uint unsigned intsbit P31=P3^1;//位声明sbit P32=P3^2;sbit P33=P3^3;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴段码表uint hou1,hou2,min1,min2,sec1,sec2,numhou,nummin,numsec,yue1,yue2,ri1,ri2,numyue,numri; uint num,m,n;void delayms(uint xms)//延时函数{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void p31xd()//按键P31消抖{ delayms(2);while(P31!=1);delayms(2);}void p32xd()//按键P32消抖{ delayms(1);while(P32!=1);delayms(1);}void p33xd()//按键P33消抖{ delayms(1);while(P33!=1);delayms(1);}void displaysj()//显示时间{P2=0x00;P0=table[hou1];//显示时的第一位P2=0X20;delayms(1);P2=0xff;P0=table[hou2]&0x7f;//显示时的第二位与小数点P2=0X10;delayms(1);P2=0xff;P0=table[min1];//显示分的第一位P2=0X08;delayms(1);P2=0xff;P0=table[min2]&0x7f;//显示时的第二位与小数点P2=0X04;delayms(1);P2=0xff;P0=table[sec1];//显示秒的第一位P2=0X02;delayms(1);P2=0xff;P0=table[sec2];//显示秒的第二位P2=0X01;delayms(1);}void displayrq()//显示日期{ P2=0x00;P0=table[yue1];//显示月的第一位P2=0X20;delayms(1);P2=0x00;P0=table[yue2]&0x7f;//显示月的第二位P2=0X10;delayms(1);P2=0x00;P0=table[ri1];//显示日的第一位P2=0X08;delayms(1);P2=0x00;P0=table[ri2];//显示日的第二位P2=0X04;delayms(1);}void houqh()//时针切换函数{hou1=numhou/10;hou2=numhou%10;}void minqh()//分针切换函数{min1=nummin/10;min2=nummin%10;}void secqh()//秒针切换函数{sec1=numsec/10;sec2=numsec%10;}void yueqh()//月切换函数{yue1=numyue/10;yue2=numyue%10;}void riqh()//日切换函数{ri1=numri/10;ri2=numri%10;}void start()//初始化函数{num=0;TMOD=0x01;TH0=(65532-45872)/256;TL0=(65532-45872)%256;EA=1;IT0=0;//电平触发(低电平有效)EX0=1;ET0=1;TR0=1;yueqh(),riqh();//初始化日月切换}void ritiao()//日期的调节函数{ if(P32==0)//日期加一调节键{p32xd();if((numyue==1)||(numyue==3)||(numyue==5)||(numyue==7)||(numyue==8)||(numyue==10)||( numyue==12)){numri+=1;if(numri>=31)//如果是大月,日期有31号,等于符号是防止日期大于31号而乱码{numri=1;}}if((numyue==4)||(numyue==6)||(numyue==9)||(numyue==11)){numri+=1;if(numri>=30)//如果是小月,日期有30号{numri=1;}}if(numyue==2){numri+=1;if(numri>=28)//如果是小月,日期有28号{numri=1;}}riqh();//日期调节后切换一下}if(P33==0)//日期减一调节键{p33xd();if((numyue==1)||(numyue==3)||(numyue==5)||(numyue==7)||(numyue==8)||(numyue==10)||( numyue==12)){numri-=1;if(numri==0){numri=31;}}if((numyue==4)||(numyue==6)||(numyue==9)||(numyue==11)){numri-=1;if(numri==0){numri=30;}}if(numyue==2){numri-=1;if(numri==0){numri=28;}}riqh();}}void yuetiao()//月份的调节函数{if(P32==0){p32xd();numyue+=1;if(numyue==13)//月份为12时再加一马上为一月{numyue=1;}yueqh();}if(P33==0){p33xd();numyue-=1;if(numyue==0){numyue=12;}yueqh();}}void int0() interrupt 0{p31xd();while(P31!=0)//第一次按下p31时,进行秒调时{for(m=0;m<40;m++)//此for循环不显示秒,为的是使秒闪烁{P2=0x00;P0=table[hou1];P2=0X20;delayms(1);P2=0x00;P0=table[hou2]&0x7f;P2=0X10;delayms(1);P2=0x00;P0=table[min1];P2=0X08;delayms(1);P2=0x00;P0=table[min2]&0x7f;P2=0X04;delayms(1);if(P32==0)//如果按一下P32,则秒加一{p32xd();numsec+=1;if(numsec==60){numsec=0;}secqh();}if(P33==0)//如果按一下P33,则秒减一{p33xd();numsec-=1;if(numsec==-1){numsec=59;}secqh();}};for(n=0;n<40;n++)//此循环时分秒全显示,也为的是使秒闪烁{ displaysj();if(P32==0){p32xd();numsec+=1;if(numsec==60){numsec=0;}secqh();}if(P33==0){p33xd();numsec-=1;if(numsec==-1){numsec=59;}secqh();}}};p31xd();while(P31!=0)//第二次按下p31时,进行分调时{for(m=0;m<40;m++){P2=0x00;P0=table[hou1];P2=0X20;delayms(1);P2=0x00;P0=table[hou2]&0x7f;P2=0X10;delayms(1);P2=0x00;P0=table[sec1];P2=0X02;delayms(1);P2=0x00;P0=table[sec2];P2=0X01;delayms(1);if(P32==0){p32xd();nummin+=1;if(nummin==60){nummin=0;}minqh();}if(P33==0){p33xd();nummin-=1;if(nummin==-1){nummin=59;}minqh();}}for(n=0;n<40;n++){ displaysj();if(P32==0){p32xd();nummin+=1;if(nummin==60){nummin=0;}minqh();}if(P33==0){nummin-=1;if(nummin==-1){nummin=59;}minqh();}}};p31xd();while(P31!=0)//第三次按下p31时,进行时调时{for(m=0;m<40;m++){P2=0x00;P0=table[min1];P2=0X08;delayms(1);P2=0x00;P0=table[min2]&0x7f;P2=0X04;delayms(1);P2=0x00;P0=table[sec1];P2=0X02;delayms(1);P2=0x00;P0=table[sec2];P2=0X01;delayms(1);if(P32==0){p32xd();numhou+=1;if(numhou==24){numhou=0;}}if(P33==0){p33xd();numhou-=1;if(numhou==-1){numhou=23;}houqh();}}for(n=0;n<40;n++){ displaysj();if(P32==0){p32xd();numhou+=1;if(numhou==24){numhou=0;}houqh();}if(P33==0){p33xd();numhou-=1;if(numhou==-1){numhou=23;}houqh();}}}p31xd();while(P31!=0)//第四次按下p31时,进行日期调节{for(m=0;m<50;m++){ P2=0x00;P0=table[yue1];P2=0x20;delayms(1);P2=0x00;P0=table[yue2]&0x7f;P2=0x10;delayms(1);ritiao();}for(n=0;n<50;n++){ displayrq();ritiao();}}p31xd();while(P31!=0)//第五次按下p31时,进行月调节{for(m=0;m<50;m++){P2=0xff;P0=table[ri1];P2=0xf7;delayms(1);P2=0xff;P0=table[ri2];P2=0xfb;delayms(1);yuetiao();}for(n=0;n<50;n++){ displayrq();yuetiao();}}p31xd();}void yuejia(){ numri=1;numyue+=1;if(numyue==13){numyue=1;}}void timer0() interrupt 1{TH0=(65532-46100)/256;TL0=(65532-46100)%256;num++;if(num==20){num=0;TH0=(65532-46100)/256;TL0=(65532-46100)%256;numsec=numsec+1;if(numsec==60){numsec=0;nummin=nummin+1;if(nummin==60){nummin=0;numhou=numhou+1;if(numhou==24){numhou=0;numri+=1;if((numyue==1)||(numyue==3)||(numyue==5)||(numyue==7)||(numyue==8)||(numyue==10)||( numyue==12)){numri+=1;if(numri>=31){numri=1;numyue+=1;if(numyue==13){numyue=1;}}}if((numyue==4)||(numyue==6)||(numyue==9)||(numyue==11)){numri+=1;if(numri>=31){numri=1;numyue+=1;if(numyue==13){numyue=1;}}}if(numyue==2){numri+=1;if(numri>=29){numri=1;numyue+=1;if(numyue==13){numyue=1;}}}}}}}}void main(){numhou=12;//初始化时间设为12点,日期设为1月1日nummin=0;numsec=0;numyue=1;numri=1;start();while(1){if(P32==1)//默认(没有按下p32时)显示时间{houqh(),minqh(),secqh();displaysj();}if(P32==0)//当按下p32键时显示日期{yueqh(),riqh();displayrq();}}}。
c语言程序设计电子书C语言程序设计是一门基础且广泛应用的编程语言课程,它以其高效、灵活和强大的功能而著称。
C语言由丹尼斯·里奇(Dennis Ritchie)在20世纪70年代初期于贝尔实验室开发,至今仍是许多系统软件和应用软件的首选语言。
本电子书将从C语言的基本概念、语法结构、数据类型、控制结构、函数、数组、指针、结构体、文件操作等方面进行详细介绍。
第一章:C语言概述C语言是一种过程式编程语言,它支持结构化编程。
C语言的设计哲学是提供一种通用、高效、易于使用的语言,同时保持对硬件的控制。
C 语言广泛应用于操作系统、嵌入式系统、高性能计算等领域。
第二章:C语言环境和基本语法在开始编写C程序之前,需要配置C语言开发环境,如GCC编译器。
C 程序的基本结构包括预处理指令、函数、变量声明和语句。
程序从`main`函数开始执行。
第三章:数据类型和变量C语言提供了多种数据类型,包括整型、浮点型、字符型等。
变量是程序中存储数据的容器,需要先声明后使用。
C语言是静态类型语言,每种变量在使用前必须指定数据类型。
第四章:运算符和表达式C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。
表达式是由变量、常量和运算符组成的组合,用于执行计算。
第五章:控制结构控制结构是程序流程控制的基本构件。
C语言提供了三种基本的控制结构:顺序结构、选择结构(if语句、switch语句)和循环结构(for 循环、while循环、do-while循环)。
第六章:函数函数是C语言中实现代码复用的重要手段。
函数允许将代码组织成独立的块,每个块可以执行特定的任务。
C语言支持函数的定义、声明、调用和递归。
第七章:数组数组是相同数据类型元素的集合。
C语言支持一维数组和多维数组。
数组在内存中是连续存储的,这使得数组操作高效但也需要小心越界问题。
第八章:指针指针是C语言的核心特性之一。
指针变量存储的是另一个变量的内存地址。
单片机c语言单片机C语言是一种利用C语言编程的指令集,它能够让程序员们在单片机系统里编写并实现C程序。
单片机C语言也可以称为MCU C语言,它是使用最广泛的微控制器控制器编程语言之一,可以将复杂的系统或功能封装为一个单片机芯片,从而实现低成本高性能的计算机控制系统。
单片机C语言的特点1.洁:C语言是程序员们编写单片机程序的首选语言,因为它的语法简洁易懂,也比较容易掌握,让程序员们在开发单片机系统时可以快速理解和编写程序。
2.容:C语言是能够在不同硬件平台上编写程序的语言,它可以编写经过编译后可以在不同的硬件和操作系统上运行的程序,这大大节约了程序员们的时间,让程序员们能够更关注软件设计本身,而不是硬件的工作。
3.用:C语言提供了许多易用的函数,可以让程序员们在编写单片机程序时可以有效的利用这些函数,让程序的编写、调试和实现变得更加快捷。
单片机C语言的应用1.子设备:单片机C语言可以用在汽车、电梯、家电等电子设备的控制和管理系统中,它可以将复杂的功能封装成一个芯片,以节省空间和成本,同时实现更加高效的控制。
2.子玩具:单片机C语言可以用在电子玩具中,它能够实现电子玩具的动态功能,从而让玩具更加有趣和生动。
3.能家居:单片机C语言可以用在智能家居系统中,让家居系统更智能,能够拥有更加丰富的功能,从而满足人们的生活和工作需求。
单片机C语言的开发1.言准备:首先,程序员要掌握C语言,以及单片机C语言的语法,仅通过这些,才能开发出准确高效的程序。
2.入系统:其次,程序员要根据硬件系统的特性对程序进行调整,并将程序移植到嵌入式系统,以便于程序能够在最小的资源消耗下得到最大的效益。
3.序测试:最后,程序员要进行代码测试,在调试程序时,要进行反馈和指出问题,以便能够快速找出问题,并及时解决。
总之,单片机C语言是一种非常实用的编程语言,它可以让程序员们在单片机系统上实现复杂的功能,能够大大节省程序员们编写程序的时间,帮助程序员们尽快完成软件开发工作。
湖南理工学院课程设计报告课程名称:专业综合课程设计专业班级:学生姓名:指导教师:完成时间:报告成绩:目录摘要 (1)第一章绪论 (3)1.1引言: (3)第二章系统方案的设计 (3)2.1 电子秤的设计要求 (3)2.1.1 基本要求 (3)2.1.2 特色与创新 (4)2.2 设计作用与目的: (4)2.3 所用仪器与设备: (4)2.4 设计原理及设计基本思路: (5)2.4.1系统的原理: (5)2.4.2 系统的基本设计思路: (5)2.5 系统总体设计方案选择 (5)2.6单片机的选型:............................... 错误!未定义书签。
2.7输入输出设备指派: (5)2.7.1 键盘输入 (5)2.7.2 输出显示 (6)2.8系统电源 (6)第三章系统硬件设计 (9)3.1 基于AT89S52的主控电路 (9)3.1.1芯片介绍 (9)3.1.2 主控电路 (14)3.2 基于ICL7135的前端信号处理电路 (14)3.2.1 芯片介绍 (14)3.2.2 信号处理电路 (19)3.3 人机交互界面 (21)3.3.1 键盘控制电路 (21)3.3.2 液晶显示电路 (24)3.4 系统电源 (26)3.4.1 芯片介绍 (26)3.4.2 电源电路 (27)3.5 报警电路.................................... 错误!未定义书签。
第四章软件流程 (28)4.1 主程序流程图 (28)4.2 主要中断程序流程图 (29)第五章源程序 (32)第六章程序调试 (44)课程设计心得 (50)参考文献 (51)摘要该设计以51系列单片机AT89S52为控制核心,实现电子秤的基本控制功能。
在设计系统时,为了更好地采用模块化设计法,分步的设计各个单元功能模块,系统的硬件部分可以分为最小系统、数据采集、人机交互界面和系统电源四大部分。
沈阳工程学院课程设计设计题目:电子词典系别信息工程系班级计本083 学生姓名学号 22指导教师姜柳、吕海华职称讲师、讲师起止日期:2009年6月15日起——2009年6月26日止沈阳工程学院课程设计任务书课程设计题目:电子词典(第 1 组)系别信息工程系班级计本075学生姓名于满盛学号 2008412322指导教师姜柳、吕海华职称讲师、讲师课程设计进行地点:实训F任务下达时间: 2009年 6月 15日起止日期:2009年6月15日起——2009年6月26日止教研室主任姜柳 2009年6月15日批准一、课程设计的原始资料及依据在计算机中建立有限规模的电子英汉词典,利用程序实现电子英汉词典的查找、增加、删除、修改等功能。
查阅有关资料,进一步理解程序设计模块化的思想,并利用此思想编写一个简单的电子词典。
通过本设计可以加深理解利用程序设计思想开发一个系统的整个流程,提高分析问题、解决问题和实际动手的能力。
二、课程设计主要内容及要求1.认真阅读资料,掌握程序设计模块化的思想。
2.要求在设计的过程中,建立清晰的层次结构。
3.画出主要的功能结构图和主要模块的流程图。
4.实现功能:⑴查找单词。
⑵增加单词。
⑶万年历⑷修改单词。
⑸显示单词。
⑹保存单词。
⑺返回⑻帮助⑼退出5. 要求操作简单,用户界面友好。
6. 运行程序,检查结果是否和理论值一致。
7. 环境使用Windows,Turbo C环境。
三、对课程设计说明书撰写内容、格式、字数的要求1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。
一般不应少于3000字。
2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。
英汉电子词典设计报告设计C语言C语言程序设计设计报告:英汉电子词典设计目标:本次设计的目标是开发一个基于C语言的英汉电子词典,实现用户通过输入英文单词或汉字查询其对应的中文释义或英文翻译。
同时,用户还可以对查询结果进行添加、修改、删除操作,方便用户自定义个性化词库。
设计思路:1.使用C语言实现用户界面,包括菜单选项和用户输入功能;2.使用文件管理系统进行词库的存储和读取,并实现对词库的增删改查功能;3.使用字符串匹配算法进行单词或汉字的查询,保证查询的精确性;4.使用二叉查找树(BST)作为数据结构,实现词库的快速查找和插入功能。
模块设计:1.用户界面模块:-显示菜单选项,包括查询、添加、修改、删除和退出;-提示用户输入相应选项,并获取用户输入;2.文件管理模块:-创建存储词库的文件,并检查文件是否存在;-实现读取文件内容到内存和将内存内容写入文件的功能;3.数据结构模块:-设计结构体,包含英文单词和中文释义;-使用二叉查找树作为词库的数据结构,实现快速查找和插入功能;4.查询模块:-根据用户输入的英文单词或汉字,进行查询;-使用字符串匹配算法进行匹配,找到对应的词条并显示;5.添加模块:-接受用户输入的英文单词和中文释义,并将其插入词库中;6.修改模块:-接受用户输入的英文单词和新的中文释义,并替换原有词条的中文释义;7.删除模块:-根据用户输入的英文单词或汉字,从词库中删除对应的词条;测试计划:-对每个模块进行单元测试,确保其功能正常;-集成测试,检查各个模块之间的交互是否正常;-进行用户测试,验证整个电子词典系统的可用性和稳定性。
总结:通过以上的设计,我们可以实现一个基于C语言的英汉电子词典,能够方便用户进行英文单词和汉字的查询,并支持用户对词库进行个性化操作。
该电子词典设计简洁,功能完备,并且具有较好的扩展性,适用于不同平台和系统的实际应用。
c语言教程电子书C语言是一种高级程序设计语言,最早由贝尔实验室的Dennis Ritchie于1972年开发。
C语言以其简洁、高效、灵活和可移植等特点,成为广泛使用的编程语言之一。
无论是初学者还是有一定编程经验的人,学习C语言都是很有必要的。
本电子书将为您提供一份全面的C语言教程,帮助您系统地学习和理解C语言的基本概念、语法、编程技巧和应用。
以下是本教程的主要内容:1. C语言的起源和发展:介绍C语言的历史背景、发展过程和应用领域,让您对C语言的重要性和广泛应用有更深入的了解。
2. C语言的基本概念:包括数据类型、运算符、控制语句、函数等基本概念,帮助您建立起对C语言的基本认识和理解。
3. C语言的语法规则:详细介绍C语言的语法规则,包括注释、标识符、预处理指令、变量声明和定义等,帮助您了解C语言的编写规范。
4. C语言的编程技巧:提供一些常用的编程技巧和技巧,包括输入输出、数组、指针、字符串处理等,帮助您提高编程的效率和质量。
5. C语言中常见问题和解决方法:解答学习C语言过程中常见的问题,如编译错误、逻辑错误等,帮助您快速解决问题并提高编程能力。
6. C语言的应用实例:为了帮助您更好地理解和应用C语言,本教程还提供了一些实际的应用实例,如数学计算、图形绘制等,让您在动手实践中掌握C语言的应用技巧。
通过学习本电子书,您将能够全面掌握C语言的基本知识和编程技巧,培养分析和解决问题的能力,为日后学习其他编程语言奠定坚实的基础。
无论是从事软件开发、嵌入式系统、游戏开发等领域,还是考取相关的编程证书,都会极大地受益于学习C语言。
最后,希望这本C语言教程能够成为您学习和掌握C语言的良好指南,帮助您在编程的道路上取得成功!祝您学习愉快,顺利掌握C语言!。
精品课程《C语言程序设计》电子教案(一)一、课程简介1.1 课程背景1.2 课程目标(1)掌握C语言的基本语法和数据类型;(2)熟悉运算符、表达式和语句的结构;(3)掌握函数的定义和调用;(4)了解常用的库函数和头文件;(5)学会使用C语言进行程序设计和调试;(6)培养编程思维和解决问题的能力。
二、教学内容2.1 课程安排本课程共分为五个部分,具体安排如下:第一部分:C语言基础知识(2周)第1周:C语言概述、变量和数据类型第2周:运算符、表达式和语句第二部分:程序控制结构(3周)第3周:顺序结构第4周:选择结构第5周:循环结构第三部分:函数与数组(3周)第6周:函数的定义和调用第7周:数组和字符串第8周:指针第四部分:指针与引用(2周)第9周:指针的应用第10周:引用第五部分:综合练习与课程设计(2周)第11周:综合练习第12周:课程设计2.2 教学方法采用讲授、实验、讨论相结合的教学方法,通过案例分析和编程实践,使学生掌握C语言的基本知识和编程技巧。
三、教学资源3.1 教材《C语言程序设计》,作者:谭浩强3.2 实验环境配置有C语言编译器的计算机实验室,如:Visual Studio、Code::Blocks等。
3.3 网络资源精品课程网站:提供课程讲义、实验指导、习题库、在线测试等功能。
四、课程考核4.1 考核方式课程考核分为过程考核和期末考试两部分,其中过程考核占60%,期末考试占40%。
4.2 过程考核包括课堂表现、实验报告、课后作业和在线测试等。
4.3 期末考试采取闭卷考试的方式,试题包括选择题、填空题、简答题和编程题等。
五、教学反馈5.1 学生反馈学生可通过课程网站、邮件等方式向教师反馈学习过程中遇到的问题和建议。
5.2 教师反馈教师根据学生的课堂表现、实验报告和作业等情况,及时给予反馈和指导。
精品课程《C语言程序设计》电子教案(二)六、第一部分:C语言基础知识6.1 第1周:C语言概述、变量和数据类型教学目标:了解C语言的发展历程、特点和应用领域;掌握基本数据类型、变量定义和初始化。
英汉电子词典设计报告_设计_C语言_C语言程序设计设计报告英汉电子词典一、设计目标:设计一个英汉电子词典,实现用户输入英文单词能够得到对应的中文翻译,并提供简单的用户界面。
二、设计思路:1.定义词典数据库结构:使用结构体来表示一个词条,包括英文单词和中文翻译两个成员变量。
2.读取词典文件:从外部文件中读取词典数据,并将数据存储到内存中的数组中。
3.用户交互界面设计:使用基本的文本界面,提示用户输入英文单词。
4.查询单词:根据用户输入的英文单词,在内存中的数组中查找对应的词条,并将中文翻译打印出来。
5.处理用户输入:对用户输入的英文单词进行处理,如将大写字母转换为小写字母,去除多余的空格等。
三、程序设计:1.定义词典结构体:```ctypedef structchar word[100];char translation[100];} DictionaryEntry;```2.读取词典文件:```cvoid readDictionary(DictionaryEntry* dictionary, int* size) //打开词典文件FILE* file = fopen("dictionary.txt", "r");if (file == NULL)printf("Unable to open dictionary file\n");return;}//逐行读取词典数据char line[256];int i = 0;while (fgets(line, sizeof(line), file))sscanf(line, "%s %s", dictionary[i].word,dictionary[i].translation);i++;}//设置词典大小*size = i;//关闭文件fclose(file);```3.用户交互界面设计:```cvoid printUserInterfacprintf("Please enter an English word: ");```4.查询单词:```cvoid searchWord(DictionaryEntry* dictionary, int size, char* word)for (int i = 0; i < size; i++)if (strcmp(dictionary[i].word, word) == 0)printf("%s: %s\n", dictionary[i].word,dictionary[i].translation);return;}}printf("Word not found\n");```5.处理用户输入:```cvoid processInput(char* input)//去除输入字符串中的多余空格int len = strlen(input);int j = 0;for (int i = 0; i < len; i++)if (input[i] != ' ')input[j] = tolower(input[i]);j++;}}input[j] = '\0';```四、总结:通过以上设计思路和程序设计,实现了一个简单的英汉电子词典。
本科毕业论文(设计)题目:基于51单片机数字电子称的设计院系:电子与通信工程学院专业:电子信息科学与技术姓名: ***学号: ***指导教师:张涛教师职称:副教授填写日期: 2013年4月20日摘要随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求。
为了改变传统称重工具在使用上存在的问题,在本设计中将智能化、自动化、人性化用在了电子称重的控制系统中。
本系统主要由单片机来控制,测量物体重量部分由称重传感器及A/D转换器组成,加上显示单元,此电子秤具备了功能多、性能价格比高、功耗低、系统设计简单、使用方便直观、速度快、测量准确、自动化程度高等特点。
本系统以AT89C51单片机为主控芯片,外围附以称重电路、显示电路、报警电路、键盘电路等构成智能称重系统电路,从而实现自动称重系统的称重功能、报警功能、数据计算功能以及人机交换功能。
可以说,此设计所完成的电子秤很大程度上满足了应用需求。
关键词:AT89C51;MPX4250压力传感器;A/D转换器;LCD显示器AbstractWith the application of microelectronic technology,the tools of traditional weighing on the market have can't satisfy the demands of people. In order to change the problem of the application of traditional weighing tools in the using of daily life, the design will be integrated with intelligence, automation and human nature in the electronic scales with weight control system. This system mainly controlled by the single chip microcomputer , measured by weighting transducer and A/D converter component and added with the display unit, the electronic scales are aptitude for the high ratio of performance, multi-function , low power consumption ,and it is simple enough ,especially it is given the characteristic with Easy-to-use intuitively, Speed, Measure accurately, Higher automation.The system take AT89C51 SCM as the main controller chip, and its peripheral circuit attach to integrated circuit, display circuit, alarm circuit, keyboard circuit which integrate the weighing system circuit board, so the design can realize the automatic weighing system function, alarm function, weighing data calculation function and Man-machine exchange function. We can say that the design of complete electronic scales largely meet the application requirements perfectly.KEYWORDS: AT89C51;MPX4250sensor;A/D converter;LCD Display目录第一章绪论 (6)1.1 研究目的和意义 (6)1.2 电子称重系统的应用领域 (6)1.3 国内外研究现状、发展动态 (6)1.4 主要工作以及论文结构 (7)第二章电子称工作原理及系统方案论证与选择 (9)2.1 电子称的元器件 (9)2.2 称重器的工作原理 (9)2.3 系统总体设计方案比较与论证 (9)2.4控制器部分 (12)2.5数据采集部分 (13)2.5.1 传感器的选择 (13)2.5.2 A/D转换器的选择 (14)2.6 键盘处理部分方案论证 (15)2.7 显示电路部分的选择 (16)2.8报警部分电路选择 (16)第三章电子称具体电路设计 (17)3.1 AT89C51的最小系统电路 (17)3.1.1单片机芯片AT89C51介绍 (17)3.2数据采集部分电路设计 (21)3.3显示电路与AT89C51单片机接口电路设计 (22)3.4键盘电路与AT89C51单片机接口电路设计 (24)3.5报警电路的设计 (25)第四章系统软件设计 (27)4.1 主程序设计 (27)4.2 子程序设计 (28)4.2.1 A/D转换启动及数据读取程序设计 (28)4.2.2显示子程序设计 (29)4.2.3 键盘输入控制程序的设计 (30)4.2.4报警子程序的设计 (31)第五章软件仿真及调试 (32)5.1软件使用 (32)5.1.1 keil软件的简单使用 (32)5.1.2 Protues软件的简单使用 (33)5.2 仿真调试 (34)5.3 使用说明 (36)第六章总结 (37)致谢 (38)参考文献 (39)附录 (40)附录1 系统总图 (40)附录2仿真总图 (41)附录3 程序清单 (42)第一章绪论1.1 研究目的和意义传统的机械秤有很多缺点,比如精度不高,结构复杂,易老化,成本高等。
C51单片机C语言程序设计单片机C语言程序设计是指使用C语言编写程序来控制和操作单片机的工作。
单片机是一种集成电路,它包含了中央处理器、存储器、输入输出接口等功能模块,广泛应用于嵌入式系统中。
在单片机C语言程序设计中,首先需要了解C语言的基本语法和语法规则。
C语言是一种面向过程的编程语言,具有简洁、高效和可移植等特点。
接下来,要熟悉单片机的硬件结构和寄存器的使用方法,了解单片机的输入输出方式、中断、定时器等功能。
在进行单片机C语言程序设计时,需要按照以下步骤进行:1.设置寄存器和引脚的初始化:根据单片机的型号和需要的功能,设置相关的寄存器和引脚的初始化。
这些初始化可以包括引脚的输入输出模式设置、中断向量表的初始化、定时器的设定等。
2.主程序的编写:主程序是单片机的执行入口,通过主程序可以完成各种功能的实现。
在主程序中,可以定义变量、函数和结构体等。
3.中断程序的编写:中断程序是由硬件触发的,可以在需要时被调用执行。
中断程序可以包括外部中断、定时器中断等。
在编写中断程序时,需要设置相应的中断向量,并完成相应的中断服务程序。
4.函数的编写:函数是实现其中一特定功能的代码段,通过函数可以提高程序的模块化和可重用性。
需要根据实际需求编写相应的函数,并在主程序中调用。
5. 调试和测试:在编写完程序后,需要进行调试和测试。
通过调试和测试可以发现程序中的bug和错误,并进行修复。
可以通过缓慢单步调试、观察变量值和输出结果等方式进行调试和测试。
6.优化和改进:在程序完成后,可以对程序进行优化和改进。
通过优化可以提高程序的性能和效率,减少资源的占用。
可以使用编译优化选项、减少不必要的计算和内存使用等方式进行优化。
以上是单片机C语言程序设计的基本步骤和内容。
在实际操作中,还需要根据具体的需求和硬件平台进行相应的调整和编程。
通过合理的设计和编程,可以实现单片机的各种功能和应用,广泛应用于电子设备、汽车、家电等领域。
无论是初学者还是有经验的程序员,都可以通过单片机C语言程序设计来进一步提高和拓展自己的技能。
精品课程《C语言程序》电子教案(一)章节一:C语言概述教学目标:1. 了解C语言的历史和发展背景。
2. 掌握C语言的特点和应用领域。
3. 熟悉C语言的编译环境和基本语法。
教学内容:1. C语言的历史和发展背景。
2. C语言的特点和应用领域。
3. C语言的编译环境和基本语法。
教学方法:1. 讲解法:讲解C语言的历史、特点和应用领域。
2. 示例法:展示C语言的编译环境和基本语法。
教学资源:1. PPT课件。
2. C语言编译环境演示。
教学过程:1. 介绍C语言的历史和发展背景。
2. 讲解C语言的特点和应用领域。
3. 演示C语言的编译环境和基本语法。
4. 学生练习:编写简单的C语言程序。
教学评价:1. 课后作业:让学生编写简单的C语言程序,巩固所学内容。
2. 课堂问答:检查学生对C语言的了解程度。
精品课程《C语言程序》电子教案(二)章节二:数据类型、运算符和表达式教学目标:1. 掌握C语言的数据类型。
2. 熟悉C语言的运算符和表达式。
教学内容:1. C语言的数据类型。
2. C语言的运算符和表达式。
教学方法:1. 讲解法:讲解数据类型、运算符和表达式的概念及用法。
2. 示例法:展示数据类型、运算符和表达式的实际应用。
教学资源:1. PPT课件。
2. 编程实例。
教学过程:1. 介绍C语言的数据类型。
2. 讲解C语言的运算符和表达式。
3. 示例演示:运用数据类型、运算符和表达式编写程序。
4. 学生练习:编写运用数据类型、运算符和表达式的C语言程序。
教学评价:1. 课后作业:让学生编写运用数据类型、运算符和表达式的C语言程序。
2. 课堂问答:检查学生对数据类型、运算符和表达式的掌握程度。
精品课程《C语言程序》电子教案(三)章节三:控制语句教学目标:1. 掌握C语言的控制语句。
教学内容:1. C语言的控制语句。
教学方法:1. 讲解法:讲解控制语句的概念及用法。
2. 示例法:展示控制语句的实际应用。
教学资源:1. PPT课件。
下面介绍main.c主程序编写,其他程序略。
(1) 头文件和一些宏定义#include <reg52.h>#include <intrins.h>#include <string.h>#include "lcd.h"#include "hx711.h"#include "keyboard.h"//定义量程系数#define RATIO 2114/1623//定义标识volatile bit FlagTest = 0; //定时测试标志,每0.5秒置位,测完清0 volatile bit FlagKeyPress = 0; //有键按下标志,处理完毕清0volatile bit FlagSetPrice = 0; //价格设置状态标志,设置好为1。
//管脚定义sbit LedA = P2^2;sbit beep = P1^0;sbit alert = P1^1;//显示用变量int Counter;uchar idata str1[6] = "000000";int i, iTemp;//称重用变量unsigned long idata FullScale; //满量程AD值/1000unsigned long AdVal; //AD采样值unsigned long weight; //重量值,单位gunsigned long idata price; //单价,长整型值,单位为分unsigned long idata money; //总价,长整型值,单位为分//键盘处理变量uchar keycode;uchar DotPos; //小数点标志及位置//函数声明void int2str(int, char *);void Data_Init();void Port_Init();void Timer0_Init();void Timer0_ISR () ;void INT1_Init();void KeyPress(uchar);void To_Zero();void Display_Price();void Display_Weight();void Display_Money();//整型转字符串的函数,转换范围0--65536void int2str(int x, char* str){int i=1;int tmp=10;while(x/tmp!=0){i++;tmp*=10;}tmp=x;str[i]='\0';while(i>1){str[--i]='0'+(tmp%10);tmp/=10;}str[0]=tmp+'0';}//重新找回零点,每次测量前调用void To_Zero(){FullScale=ReadCount()/1000;price=0;}//显示单价,单位为元,四位整数,两位小数void Display_Price(){ unsigned int i,j;display_GB2312_string(5,44," ");i = price/100; //得到整数部分j = price - i*100;//得到小数部分int2str(i,str1);//显示整数部分if (i>=1000){ display_GB2312_string(5,44,str1);}else if (i>=100){ display_GB2312_string(5,52,str1);}else if (i>=10){ display_GB2312_string(5,60,str1);}else{ display_GB2312_string(5,68,str1);}//显示小数点display_GB2312_string(5,76,".");//显示小数部分int2str(j,str1);if (j<10){ display_GB2312_string(5,84,"0");display_GB2312_string(5,92,str1);}else{ display_GB2312_string(5,84,str1);}}//显示重量,单位kg,两位整数,三位小数void Display_Weight(){ unsigned int i,j;display_GB2312_string(3,60," ");//weight单位是gi = weight/1000; //得到整数部分j = weight - i*1000;//得到小数部分int2str(i,str1);if (i>=10){ display_GB2312_string(3,60,str1);}else{ display_GB2312_string(3,68,str1);}display_GB2312_string(3,76,".");int2str(j,str1);if (j<10){ display_GB2312_string(3,84,"00");display_GB2312_string(3,100,str1);}else if (j<100){ display_GB2312_string(3,84,"0");display_GB2312_string(3,92,str1);}else{ display_GB2312_string(3,84,str1);}}//显示总价,单位为元,四位整数,两位小数void Display_Money(){ unsigned int i,j;display_GB2312_string(7,44," ");if (money>999999) //超出显示量程{ display_GB2312_string(7,44,"-------");return;}i = money/100; //得到整数部分j = money - i*100;//得到小数部分int2str(i,str1);//显示整数部分if (i>=1000){ display_GB2312_string(7,44,str1);}else if (i>=100){ display_GB2312_string(7,52,str1);}else if (i>=10){ display_GB2312_string(7,60,str1);}else{ display_GB2312_string(7,68,str1);}//显示小数点display_GB2312_string(7,76,".");//显示小数部分int2str(j,str1);if (j<10){ display_GB2312_string(7,84,"0");display_GB2312_string(7,92,str1);}else{ display_GB2312_string(7,84,str1);}}//数据初始化void Data_Init(){ price = 0;DotPos = 0;beep = 1;alert = 1;}//管脚配置void Port_Init(){}//定时器0初始化void Timer0_Init(){ ET0 = 1; //允许定时器0中断TMOD = 1; //定时器工作方式选择TL0 = 0x06;TH0 = 0xf8; //定时器赋予初值TR0 = 1; //启动定时器}//定时器0中断void Timer0_ISR (void) interrupt 1 using 0{ TL0 = 0x06;TH0 = 0xf8; //定时器赋予初值//每0.5秒钟刷新重量Counter ++;if (Counter >= 200){ FlagTest = 1;Counter = 0;}}//按键响应程序,参数是键值//返回键值:// 7 8 9 10(清0)// 4 5 6 11(删除)// 1 2 3 12(未定义)// 14(未定义) 0 15(.) 13(确定价格)void KeyPress(uchar keycode){ switch (keycode){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9://目前在设置整数位,要注意price是整型,存储单位为分if (DotPos == 0){ //最多只能设置到千位if (price<100000){ price=price*10+keycode*100;}}//目前在设置小数位else if (DotPos==1) //小数点后第一位{ price=price+keycode*10;DotPos++;}else if (DotPos==2){ price=price+keycode;}Display_Price();break;case 10: //清零键To_Zero();Display_Price();FlagSetPrice = 0;DotPos = 0;break;case 11: //删除键,按一次删除最右一个数字if (DotPos==2){ price=price/10;price=price*10;DotPos--;}else if (DotPos==1){ price=price/100;price=price*100;DotPos--;}else if (DotPos==0){ price=price/1000;price=price*100;}Display_Price();break;case 13: //确认键FlagSetPrice = 1;break;case 15: //小数点按下if (DotPos == 0){ DotPos = 1; //小数点后第一位}break;}}//===============main program===================// void main(void){ Rom_CS=1;initial_lcd();EA = 0;Data_Init();Port_Init();Timer0_Init();//初始化完成,开中断EA = 1;//背光LedA = 1;clear_screen(); //clear all dotsdisplay_GB2312_string(1,1,"电子秤初始化....");To_Zero();display_GB2312_string(1,1,"电子秤初始化成功");display_GB2312_string(3,1,"重量: kg");display_GB2312_string(5,1,"单价: 元");display_GB2312_string(7,1,"金额: 元");Display_Price();while(1){ //每0.5秒称重一次if (FlagTest==1){//称重,得到重量值weight,单位为gAdVal=ReadCount();weight=FullScale-AdVal/1000;if (weight>0x8000) weight=0;weight=10000*weight/FullScale;weight=weight*RATIO;//如果超量程,则报警if (weight >= 10000){ beep = 0;alert = 0;display_GB2312_string(3,60,"------");display_GB2312_string(7,44,"--------");}//如果不超量程else{ beep = 1;alert = 1;//显示重量值Display_Weight();//如果单价设定好了,则计算价格if (FlagSetPrice == 1){ money = weight*price/1000; //money单位为分//显示总金额Display_Money();}else{ display_GB2312_string(7,44," ");}//清测试标志FlagTest = 0;}}//获取按键keycode = Getkeyboard();//有效键值0-15if ((keycode<16)&&(FlagKeyPress==0)){ FlagKeyPress = 1;KeyPress(keycode);FlagKeyPress = 0;}delay(20);}}。