当前位置:文档之家› 电子称C语言程序

电子称C语言程序

电子称C语言程序
电子称C语言程序

下面介绍main.c主程序编写,其他程序略。

(1) 头文件和一些宏定义

#include

#include

#include

#include "lcd.h"

#include "hx711.h"

#include "keyboard.h"

//定义量程系数

#define RA TIO 2114/1623

//定义标识

volatile bit FlagTest = 0; //定时测试标志,每0.5秒置位,测完清0 volatile bit FlagKeyPress = 0; //有键按下标志,处理完毕清0

volatile 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值/1000

unsigned long AdV al; //AD采样值

unsigned long weight; //重量值,单位g

unsigned 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--65536

void 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单位是g

i = 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 dots

display_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,单位为g

AdV al=ReadCount();

weight=FullScale-AdV al/1000;

if (weight>0x8000) weight=0;

weight=10000*weight/FullScale;

weight=weight*RA TIO;

//如果超量程,则报警

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-15

if ((keycode<16)&&(FlagKeyPress==0))

{ FlagKeyPress = 1;

KeyPress(keycode);

FlagKeyPress = 0;

}

delay(20);

}

}

c语言编程 题目及答案

**********************************考试形式:上机考试(60分钟) 考试题型说明:10个单选题+2个编程题 下面是编程题目的复习题型,期末考试的编程题型及难易程度与此相近,请大家认真复习,强化练习,打下坚实基础,顺利通过考试。 ********************************** 1、编写一计算阶乘的函数fac,在主函数中从键盘输入一个正整数,调用阶乘函数fac计算阶乘并输出计算结果。 2、编写一个求x的y次幂的函数pw,在main函数中从键盘输入a、b的值,然后调用pw函数求a的b次幂,并输出结果。 3、写一函数max,计算三个数中最大数。在主函数中输入三个数,调用该函数求出其中最大数并输出。(要求:三个数为实数) 4、写一个函数计算两个正整数的最大公约数,在主函数中用scanf输入m, n两个正整数,调用函数后,打印函数返回值(即这两个正整数的最大公约数)。 5、编写一个函数,该函数的功能是判断一个整数是不是素数,在main函数中 调用该函数,输出200以内所有的素数。 6、请编一个自定义函数,功能:将给定的字符串中的所有字母改为小写字母。字符串在主函数中从键盘任意输入(容许包含空格) 7、编写一个函数,该函数的功能是判断一个整数是不是素数,在main函数

中输入一个整数,调用该函数,判断该数是不是素数,若是则输出“yes”, 否则输出“no” 8、将1--1000中所有21的倍数存到一个一维数组中,再按每行5个数据输出到屏幕上。 9、在屏幕上打印以下图案:(要求打印N行,N用符号常量定义为7) * ** *** **** ***** ****** ******* 10、输出所有在正整数200和300之间能被6整除、但不能被4整除的数,并统计这样的数有多少个。 11、求S=1/1+1/2+1/3+……+1/100(精确到小数点后三位)。 12、编程计算1到20的平方和,并输出结果。(要求用for循环) 13、编写一个程序从键盘任意个整数,求均值及低于均值的个数,输出到屏幕。 14、编写一个程序从键盘输入10个学生的成绩到数组score中,将最高分、最低分输出,要求将该程序以文件名test1.c保存到K盘根目录。 15、在main()函数中输入一个人的年龄和性别,女士55岁退休,男士60岁退休。编写一个函数根据年龄和性别判断一个人士工作还是退休,若工作,则输出“Working!”,退休则输出“Retired!” 161、编写一个程序从键盘输入10个学生的成绩到数组score中,将最高分、最低分输出。 17、编写一个函数求一个实数的绝对值。然后在main函数中用scanf输入 任意个实数,调用该函数求它的绝对值并输出。 18、编写一个求1——n内的偶数和的函数,在main()函数中输入n,然后 调用该函数求1——n的偶数和并输出。 19、编写一个求1——n内的奇数和的函数,在main()函数中输入n,然后

C51单片机C语言程序100例_Keil

目录 目录 (1) 函数的使用和熟悉********************************/ (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (16) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0口8位LED流水点亮 (20) 实例29:用P0、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (23) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 1/192

基于单片机的语音播报电子秤设计

1 引言 在生活中我们经常需要用秤来测量物体的重量,由于秤在我们日常生活中的应用十分广泛,我们对其的设计要求就需要操作方便、易于识别。随着计量技术和电子技术的发展,传统纯机械结构的杆秤、台秤、磅秤等称量装置逐步被淘汰,电子称量装置电子秤、电子天平等以其准确、快速、方便、显示直观等诸多优点而受到人们的青睐。电子秤向提高精度和降低成本方向发展的趋势引起了对低成本、高性能模拟信号处理器件需求的增加。 1.1 称重技术的发展与成果 电子称的发展过程经历了由简单到复杂、又粗糙到精密、由机械到机电结合再到全电子化、由单一功能到多功能的过程[1]。特别是近30年以来,工艺流程中的现场称重、配料定量称重、以及产品质量的监测等工作,都离不开能输出信号的电子衡器。近年来电子称已愈来愈多地参与到数据的处理和控制过程中。现代称重技术和数据系统已经成为工艺技术、储运技术、预包装技术、收货业务及商业销售领域中不可或缺的组成部分。随着称重传感器各项性能的不断突破[2],为电子称的发展奠定了基础,国外如美国、西欧等一些国家在20世纪60年代就出现了0.1%称量准确度的电子称,并在70年代中期约对75%的机械称进行了机电结合式改造。 我国的衡器在20世纪40年代以前还全是机械式的,40年代开始发展了机电结合式的衡器,50年代开始出现了以称重传感器为主的电子衡器,80年代以来,我国通过自行研究引进消化吸收和技术改造,已由传统的机械式衡器步入集传感器、微电子技术、计算机技术与一体化的电子衡器发展阶段[3]。随着称重传感器技术以及超大规模集成电路和微处理器的进一步发展,电子称重技术及其应用范围将更进一步的发展,并被人们越来越重视。根据近些年来电子称重技术和电子衡器的发展情况及电子衡器市场的需求,电子称的发展动向为:小型化、模块化、智能化、集成化;其技术性能趋向于速率高、准确度高、可靠性高;其应用性趋向综合性、组合性[4]。 1.2 电子秤的组成 1.2.1电子秤的基本结构 电子秤是利用物体的重力作用来确定物体质量(重量)的测量仪器,也可用来确定与质量相关的其它量大小、参数、或特性。不管根据什么原理制成的电了秤均由以

电子称设计方案

便携电子称的设计方案 电子秤的应用系统是由硬件和软件所组成。硬件指单片机、扩展的存储器、扩展的输入输出设备等部分;软件是各种工作程序的总称。硬件和软件只有紧密配合、协调一致,才能提高系统的性能价格比。从一开始设计硬件时,就应考虑相应软件的设计方法,而软件设计是根据硬件原理和系统的功能要求进行的。 一、基本要求: 1、电子秤称重范围:0~;重量误差不大于; 2、数码管显示或者液晶显示:所称物体重量 二、特色与创新: 使用单片机为控制核心,大大简化了系统的组成构造,且单片机可拓 展性强,可以很方便的对系统进行拓展和应用。 2、使用键盘输入数据,操作简单,方便。 3、中文液晶显示所称量的物品重量,数量,单价,金额和所有物品的总金额。 4、具有去皮功能。 5、当物品重量超过电子秤量程,即过载情况或者是物品重量小于A/D 转换器所能转换的最小精度,即欠量程的时候,具有超重报警功能。 三、设计原理及设计基本思路: 电子称重技术的基本原理:称重技术的根本任务是测量各种状态下物体重量。实质上是测量被称物体质量,我们知道,质量的测量是物体在重力场下的重力测量获得的,用公式W=mg,w 是物体的重量,g 是在重力场的重力加速度,m 是物体的质量。目前无论是利用杠杆的原理,还是利用弹性元件的弹力与被测物体的重力达到平衡来测量物体的质量,都没有离开两个必须的条件:一是重力场,二是静力平衡。随着现代传感技术的发展,人们已从传统的机械杠杆原理测量物体的质量,发展到现在的电子称重,即用传感器把重力信号转变成电信号,利用电子计算机技术,根据电信号同重力信号的数学模型,间接的求出物体的质量。 系统的基本设计思路:

C语言程序设计期末考试试题(含答案)

C语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为( ) A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后(表示回车),x的值是( ) 。 #include main(){ int x; float y; scanf("%3d%f",&x,&y); } A、12345 B、123 C、45 D、345 8、若有以下定义int a,b; float x,则正确的赋值语句是( ) A、a=1,b=2 B、b++; C、a=b=5 D、b=int(x); 9、以下程序的执行结果是( )

#include { int i=10,j=10; printf("%d,%d\n",++i,j--); } A、11,10 B、9,10 C、11,9 D、10,9 10、巳知字母A的ASCII码是65,以下程序的执行结果是( ) #include main() { char c1='A',c2='Y'; printf("%d,%d\n",c1,c2); A、A,Y B、65,65 C、65,90 D、65,89 11、下列运算符中优先级最高的是( ) A、< B、十 C、% D、!= 12、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0是( ) 。 A、’x’&&’y’ B、x<=y C、x||y+z&&y-z D、!((x<y)&&!z ||1) 13、判断char型变量cl是否为小写字母的正确表达式为( ) A、’a’<=c1<=f’z’ B、(c1>=a)&&(c1<=z) C、(‘a’>=c1) (‘z’<=c1) D、(c1>=’a’)&&(c1<=’z’) 14、字符串"a"在内存中占据的字节个数为( ) A、0 B、 1 C、 2 D、 3 15、下面有关for循环的正确描述是( ) A、for循环只能用于循环次数已经确定的情况 B、for循环是先执行循环体语句,后判定表达式 C、在for循环中,不能用break语句跳出循环体 D、for循环体语句中,可以包含多条语句,但要用花括号括起来 16、下面程序的运行结果是( ) #include main() {int num=0; while(num<=2) {num++; printf(“%d ,num); } } A、 1 B、 1 2 C、 1 2 3

《单片机C语言程序设计》课程标准

广州康大职业技术学院 《单片机C语言程序设计》课程标准 一、基本信息 适用对像:应用电子技术专业的学生 课程代码: 学分:2 学时:36 制定人:徐又又 制定时间:2010年9月 所属系部:自动化 批准人:陶甫廷 二、课程的目标 1.专业能力目标 了解单片机C语言的特点、与PC机C语言的异同之处、单片机C语言的开发环境; 熟悉单片机C语言的基本语法规范、Keil C软件的应用及其与硬件平台的连接、C语言程 序结构设计、与单片机相关的设置等方面知识。 2.方法能力目标 了解用单片机C语言进行应用产品软件开发的步骤,具备单片机C语言程序的识读、修改的基本能力;学会使用Keil C软件进行源程序编辑、编译和软、硬件模拟调试的操作方 法与技能。 3.社会能力目标 通过后续课程《单片机应用实训》的学习与强化训练,具有使用单片机C语言进行电子产品、自动检测与控制和高新视听设施等方面的软件开发的职业技能。 三、整体教学设计思路 1.课程定位 该课程是应用电子技术和自动化技术等专业获得专业技能的必修课程之一,该课程属于职业技术课程,以培养电子产品开发相关行业急需的机电类和电子类高级技能应用型人才 为目标。 本课程一般在学生学完模拟电子技术与数字电子技术、计算机技术等专业基础课后再讲授;《单片机应用》等课程可作为先修课程,也可在同一学期开设。 2.课程开发思路

本课程根据“工学结合”的原则,强调对单片机C语言程序设计的理论部分删繁就简,以“实用够用”为度,就是为了便于他们在后续的实训月(四周)以及即将下厂顶岗实习期 (十周),将所学的单片机C语言程序设计的常用原理与实用知识,能够与实训、实习的生 产工位和顶岗工作更紧密地联系起来。 四、教学内容 1.学时分配 学习情境名称子学习情境1 子学习情境2 子学习情境3 子学习情境4 学时 分配 学习情境(单元)1 单片机C语言概述单片机C语言与 PC机C语言的异 同之处 简单的C程序介绍 及上机操作(编译 三个简单C程序) 3 教学时数 1 2 学习情境(单元)2单片机C语言开发环境 建立 Keil软件的使 用(源文件、 工程的建立) 上机操作(用keil 软件进行工程的设 置) 3 教学时数 2 1 学习情境(单元)3数据的类型、运算符和 表达式 用整型和字符型 定义变量 数的溢出 C51中特有的数 据类型 上机操作(用 算术运算符和 算术表达式编 写程序) 6 教学时数 2 1 2 1 学习情境(单元)4C51流程与控制顺序结构程序选择结构程序循环结构程 序(上机操作 编译冒泡排 序法程序) 6 教学时数 2 2 2 学习情 境(单 元)5 C51构造数据类型数组指针结构共用体和枚举 6 教学时数 2 2 1 1 学习情境(单元)6单片机内部资源的组成中断编程上机操作用定时器 /计数器资源 编程并编译 串口编程 6 教学时数 2 2 2 学习情境(单元)7函数函数的定义函数的调用局部变量和全局 变量 变量的存储类 别 6 教学时数 2 2 1 1

简易电子称设计报告

摘要 本简易电子秤由数据采集、控制器和人机交互界面三部分构成。其中数据采集部分由测量电路、差动放大电路与电压采集电路组成;测量电路采用4片电阻应变片组成的全桥电路。差动放大把传感器输出的微弱模拟信号放大275倍,以满足A/D转换器对输入信号电平的要求;A/D转换器把模拟信号转变成数字信号,控制器把数字信号输送到显示电路中去。控制器选用IAP15F2K61S2单片机,用按键来选择、确定功能,最后所有结果由OLED进行显示。 电子秤自带电源,并具有称重、设置单价、金额累计、去皮、超量程报警与语音播报等功能。当电子秤称重围为5.00g~500g。当重量小于50g时,称重误差小于0.5g;重量在50g及以上,称重误差小于1g。整个系统稳定,界面友好,转换精度高,人性化。 关键词:电子秤传感器 A/D 控制器

目录 第1章方案比较论证与选择 (1) 1.1整体设计思路 (1) 1.2数据采集部分 (1) 1.2.1测量电路 (1) 1.2.2放大电路 (2) 1.2.3电压采集电路 (2) 1.3控制器部分 (2) 1.4人机交互界面 (3) 1.4.1按键 (3) 1.4.2显示界面 (3) 1.5系统设计框图 (4) 第2章系统模块电路设计 (4) 2.1数据采集部分 (4) 2.1.1测量电路 (4) 2.1.2放大电路 (5) 2.1.3电压采集电路 (6) 2.2控制器部分 (7) 2.3人机交互界面 (7) 2.3.1按键 (7) 2.3.2显示界面 (7) 2.4其他 (8)

2.4.1系统电源 (8) 2.4.2语音播报部分 (8) 2.4.3固件升级接口 (8) 第3章系统软件设计 (9) 3.1软件设计工具与平台 (9) 3.2软件设计思想 (9) 3.3软件设计流程图 (10) 第4章系统调试与测试 (10) 4.1调试与测试所用仪器 (10) 4.2调试过程 (10) 4.3测试过程 (11) 4.4测试结果 (13) 4.5结果分析 (13) 第5章设计总结 (14) 参考文献 (14) 附录 (15)

C语言经典程序100题(完整版)

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。#include "stdio.h" #include "conio.h" main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } getch(); } ============================================================== 【程序2】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 #include "stdio.h" #include "conio.h" main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0. 1; bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); getch(); } ============================================================== 【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: #include "math.h" #include "stdio.h" #include "conio.h" main() { long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); /*x为加上100后开方后的结果*/ y=sqrt(i+268); /*y为再加上168后开方后的结果*/

全国大学生电子设计竞赛简易电子秤d题

2016年全国大学生电子设计竞赛 简易电子秤(D题) 高职组 摘要:系统以STC12LE5A60S2单片机为主控器,设计一款一个以电阻应变片为称重传感器的简易电子秤。该系统包括单片机主控模块、重量传感器模块、语音模块、键盘输入模块、显示模块、电源模块。重量传感器完成被测物体的重量信息采集;独立式按键设定被测物的单价;采用直流稳压输出电源5V和3V为系统提供工作电源。系统制作成本较低、工作性能稳定,能很好达到设计要求。 关键词:HX711、WTV020-SD语音模块。 目录 1设计任务与要求 (1) 1.1设计任务 (1) 1.2技术指标 (1) 1.3题目评析 (1) 2方案比较与选择 (1) 2.1 单片机模块选择 (1) 2.2 压力传感器选择................................................... 错误!未定义书签。 2.3 PCA和AD转换模块的选取............................... 错误!未定义书签。 2.4 语音模块选择....................................................... 错误!未定义书签。 2.5 输入按键模块选择............................................... 错误!未定义书签。

2.6 电源模块选择....................................................... 错误!未定义书签。 2.7 显示模块选择....................................................... 错误!未定义书签。 3 电路系统与系统设计...................................................... 错误!未定义书签。 3.1 系统总体设计....................................................... 错误!未定义书签。 3.2 单片机最小系统设计........................................... 错误!未定义书签。 3.3 压力传感器模块设计........................................... 错误!未定义书签。 3.4 语言模块设计....................................................... 错误!未定义书签。 3.5 输入按键模块设计................................................................................ 3.6 电源模块设计....................................................... 错误!未定义书签。 3.7 显示模块设计....................................................... 错误!未定义书签。 3.8 程序设计............................................................... 错误!未定义书签。4系统测试........................................................................... 错误!未定义书签。5总结................................................................................... 错误!未定义书签。参考文献.............................................................................. 错误!未定义书签。附录Ⅰ系统原理图.......................................................... 错误!未定义书签。

c语言编程例题及答案

实验报告三 (四学时) 2.1 实验目的 (1)掌握函数的定义和调用; (2)了解函数间的参数传送; 2.2 基础实验 【题目3-1】编写函数实现将输入的字母转换成大写字母(若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母”)。 算法分析: 1、输入:通过键盘接收一个字符; 2、条件判断:调用判别函数 3、函数功能为:蒋所输入字符进行判别处理,若输入小写则转换,大写字母直接输出,其他字符请输出提示“请输入字母” 4、程序结束。 【实验3-1】代码及运行结果:

【题目3-2】从键盘输入若干个同学计算机课程期末考试成绩(学生人数可由用户输入),求该课程的期末成绩的平均分并输出。 函数功能要求:实现若干(例如5名)同学的的期末成绩输入,并统计出平均分。 算法分析: 1、输入:通过键盘接收同学个数; 2、调用求平均分函数 3、输出平均成绩 4、程序结束。 【实验3-2】代码及运行结果: 【题目3-3】请用函数编写程序实现:计算3 到100 之间所有素数的平方根之和,并输出。s=148.874270。

算法分析: 1、编写函素数判别函数,确定返回标记,如果是素数返回1,否则返回0 2、编写主函数,用一重循环遍历100以内所有数据 2.1、通过素数判别函数对循环的数据进行是否为素数的判别 2.2、返回判别为真的整数,并输出 3、程序结束。 【实验3-3】代码及运行结果: #include #include int Prime(int x) { int i ; if(x<=1) return 0; for(i=2;i<=x-1;i++) { if(x%i==0) { return 0; } } return 1; } int main() { double i,sum; i=3; sum=0; while(i<=100) { if(Prime(i)) { sum=sum+sqrt(i); } else { sum=sum+0; } i++; } printf("sum=%f\n",sum); return 0; }。

钰恒JADEVERJWE(I)电子秤简体说明书

目录 1. 引言 (1) 2. 注意事项 (1) 3.使用前准备 3-1 拆封及检查………………………………………………………………………….. 3-2 配件安装…………………………………………………………………………….. 3-3 调平电子天平………………………………………………………………………..1 1 1 4. 产品介绍 4-1 产品规格及产品特性……………………………………………………………….. 4-2 前面板……………………………………………………………………………….. 4-2-1 LCD显示屏……………………………………………………………………….. 4-2-2按键说明……………………………………………………………………………4-3电源……………………………………………………………………………………2 3 3 4 5 5. 设定说明及参数描述 5-1 功能设定…………………………………………………………………………….. 5-2参数说明………………………………………………………………………………5 6 6. 单点校正及多点校正 (9) 7.操作说明 7-1秤重……………………………………………………………………………………7-2扣重&预先扣重…………………………………………………………………….... 7-3检重……………………………………………………………………………………7-4简易计数………………………………………………………………………………7-5累计、累计显示、累计清除…………………………………………………………7-6 秤对打印机初始化(选配的功能)…………………………………………….. …7-7 计算机对秤的控制命令(选配的功能)…………………………………………… 8. 外接界面 8-1适配卡接脚示意图……………………………………………………………………9 9 10 11 11 12 12 12 9. 错误信息提示和故障排除...............................................................附一:打印样本(选配的功能) (13) 14

C语言编程题(带答案)

1、求100之内自然数中最大的能被17整除的数。 2、已知a,b,c都是1位整数,求当三位整数abc、cba的和为1333时a、b、c的值。 3、计算并输出200-400之间不能被3整除的整数的和。 4、从键盘输入10个数,统计非负数的个数,并计算非负数的和 5、求100之内自然数中偶数之和。 6、输入5个数,求和并输出。要求编写求和的函数。 7、编程计算1*2*3+3*4*5+5*6*7+……+99*100*101的值。 8、编写程序,将用户输入的字符串中所有的字符a用*代替,然后输出。 9、编写程序,将一个一维数组的元素逆序存放并输出。例如,原顺序为1,2,3,4,5,逆序后为5,4,3,2,1。 10、求3行3列矩阵a[3][3]={1,2,3,4,5,6,7,8,9}非对角线上元素之和。 11、编程判断输入的整数的正负性和奇偶性。如果为正数,输出z;如果为负数,输出f;如果为偶数,输出o;如果为奇数,输出j 12、计算并输出1-200之间不能被5整除的整数的和。 13、从键盘输入n和a的值,计算a+aa+aaa+……+aa……a(n个a)的值。 14、输入5个数,求它们中最大值和平均值并输出。 15、输出所有200-400之间能被3整除且个位数字为6的整数 16、编写程序,将用户输入的字符串中所有的字符a去掉,然后输出剩余的字符。 17、计算并输出200-400之间不能被7整除的整数的和。 18.计算并输出200-400之间不能被5整除的整数的和 19、从键盘输入10个数,统计非正数的个数,并计算非正数的和 20、输入一串字符,将其中的大写字母变成对应的小写字母并输出。 21、打印所有的水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方和等于该数。例如,153就是一个水仙花数,因为153=1*1*1+5*5*5+3*3*3。 22、一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求当它第10次落地时,共经过了多少米,第10次反弹多高? 23、输出所有0-200之间能被3整除且个位数字为6的整数。 24、输入一个正整数,输出它的阶乘。 25、编写程序,判断从键盘输入的字符中数字字符的个数、大写字母的个数、小写字母的个数及其它字符的个数,以*作为字符输入结束标志。 26、编写程序,使用循环结构输出下列图形: * * * * * * * * * * * * * * * * * * * * 27、输入一串字符,逆序输出。要求使用数组实现。 28、求1-1/2+1/3-1/4+……+1/99-1/100的值。 29、输入3个学生4门课的成绩{(60,70,65,75),(75,80,75,90),(95,75,90,65)},计算每个学生的总分和平均成绩并输出,结果保留一位小数。 30、求两个正整数的最大公约数。 31、求100之内自然数中奇数之和。 32、输出所有200-400之间能被3整除且个位数字为7的整数。 33、编程计算1*2*3+4*5*6+……+97*98*99的值

单片机C语言编程实例

单片机C语言编程实例 前言 INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着 单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的 多种芯片,从而扩充和扩展了其品种和应用领域。 C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。. C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前 最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第 一章单片机C语言入门 1.1建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码, 这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软 件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑, 编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面 和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真 方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周 立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

简易电子秤设计说明书

第一章设计任务 (1) 1.1简述电子称国内外发展现状和发展趋势 1.2电子称的优势 第二章总体设计与方案选定 (4) 2.1理论基础 2.2基本原理 第三章电路调试与实验 (5) 3.1设计方案 3.2方案介绍及选定 3.2.1方案介绍 3.2.2方案选定 3.3系统各部分的设计 3.3.1传感器的设计 3.3.2传感器的选择 3.3.3测试电路设计 3.3.4主要芯片介绍 3.3.5方案分析 3.4调试方法和实验分析 3.4.1调试方法 3.4.2实验结果误差分析 3.4.3设计中产生错误的分析 第四章设计总结体会 (16) 4.1设计总计体会 附录 (17) 附录1 电路 附录2 PCB图

第一章设计任务 1.1简述电子称国内外发展现状和发展趋势 国内发展 50年代中期电子技术的渗入推动了衡器制造业的发展。60年代初期出现机电结合式电子衡器以来,经过40多年的不断改进与完善,我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。电子衡器制造技术及应用得到了新发展。电子称重技术从静态称重向动态称重发展:计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展,特别是对快速称重和动态称重的研究与应用。电子称重技术基本达到国际上20世纪90年代中期的水平,少数产品的技术已处于国际领先水平。国内的电子秤市场中,1009左右量程的电子秤精度一般为0.019即10mg。在研究方法上,电子称重系统的工作原理一般是将作用在承载器上的质量或力的大小,通过压力传感器转换为电信号,并通过控制电路来处理该电信号。但就总体而言,我国电子衡器产品的数量和质量与工业发达国家相比还有较大差距,其主要差距是技术与工艺不够先进、工艺装备与测试仪表老化、开发能力不足、产品的品种规格较少、功能不全、稳定性和可靠性较差等。 国外发展 在国际上,一些发达国家在电子称重力一面已经达到了较高的水平。特别是在准确度和可靠性等方面有了很大的提高。在称重传感器方面,国外电子秤产品的品种和结构又有创新,技术功能和应用范围不断扩大, 1)美国Revere公司研制出PUS型具有大气压力补偿功能的拉压两用的称重传感器,用于高准确度检验平台,称重平台,准确度可达5000d。 2)德国HBM公司研制成功C2A、 C16A两种不同结构的1-100t具有耐压外壳保护的防爆称重传感器,其防爆性能符合欧洲EN50014和EN50018d级标准。 3)美国斯凯梅公司研制出新一代高准确度不锈钢F6Ox系列5-5000kg称重传感器,准确度6000d。用于湿度大,腐蚀性强的环境中,而且防水。 4)德国塞特内尔公司研制出以被青铜为弹性体材料,快速称重用200型称重传感器。其特点是线性好,固有频率高,动态响应快。独创油阻尼装置与过载保护装置一体化,保证称量时速度快,工作寿命长。组装3一30kg电子平台秤,准确度可达4000d。

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。那个单片机究竟有什么 功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^) 我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机 上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。 #include //头文件定义。或用#include其具体的区别在于:后者定义了更多的地址空间。 //在Keil安装文件夹中,找到相应的文件,比较一下便知! sbit P1_0 = P1 ^ 0; //定义管脚 void main (void) { while(1) { P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效 } } 就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。因为我们把LED的正通过电阻接至VCC。 P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。那么这样就能达到了我们预先的要求了。 while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其他的LED,也类似上述语句。这里就不再讲了。 点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其 实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。假设我们有8个LED分别接在P1口的8个引脚上。硬件连接,在 P1_1--P1_7上再接7个LED即可。例程如下: #include sbit P1_0 = P1 ^ 0; sbit P1_1 = P1 ^ 1; sbit P1_2 = P1 ^ 2; sbit P1_3 = P1 ^ 3; sbit P1_4 = P1 ^ 4; sbit P1_5 = P1 ^ 5; sbit P1_6 = P1 ^ 6; sbit P1_7 = P1 ^ 7; void Delay(unsigned char a) { unsigned char i; while( --a != 0) {

单片机C语言程序设计师试题及答案

单片机C语言程序设计师试题 一、填空题 1、设X=5AH,Y=36H,则X与Y“或”运算为_________,X与Y的“异或”运算为________。 2、若机器的字长为8位,X=17,Y=35,则X+Y=_______,X-Y=_______(要求结果写出二进制形式)。 3、单片机的复位操作是__________(高电平/低电平),单片机复位后,堆栈指针SP的值是________。 4、单片机中,常用作地址锁存器的芯片是______________,常用作地址译码器芯片是_________________。 5、若选择内部程序存储器,应该设置为____________(高电平/低电平),那么,PSEN信号的处理方式为__________________。 6、单片机程序的入口地址是______________,外部中断1的入口地址是_______________。 7、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为_________,机器周期为_______________。 8、外围扩展芯片的选择方法有两种,它们分别是__________________和_______________。 9、单片机的内部RAM区中,可以位寻址的地址范围是__________________,特殊功能寄存器中,可位寻址的地址是____________________。 10、子程序返回指令是________,中断子程序返回指令是_______。 11、8051单片机的存储器的最大特点是____________________与____________________分开编址。 12、8051最多可以有_______个并行输入输出口,最少也可以有_______个并行口。 13、_______是C语言的基本单位。 14、串行口方式2接收到的第9位数据送_______寄存器的_______位中保存。 15、MCS-51内部提供_______个可编程的_______位定时/计数器,定时器有_______种工作方式。 16、一个函数由两部分组成,即______________和______________。 17、串行口方式3发送的第9位数据要事先写入___________寄存器的___________位。 18、利用8155H可以扩展___________个并行口,___________个RAM单元。 19、C语言中输入和输出操作是由库函数___________和___________等函数来完成。 二、选择题 1、C语言中最简单的数据类型包括(b )。 A、整型、实型、逻辑型 B、整型、实型、字符型 C、整型、字符型、逻辑型 D、整型、实型、逻辑型、字符型 2、当MCS-51单片机接有外部存储器,P2口可作为( c )。 A、数据输入口 B、数据的输出口 C、准双向输入/输出口 D、输出高8位地址 3、下列描述中正确的是( d )。 A、程序就是软件 B、软件开发不受计算机系统的限制 C、软件既是逻辑实体,又是物理实体 D、软件是程序、数据与相关文档的集合 4、下列计算机语言中,CPU能直接识别的是( d )。 A、自然语言 B、高级语言 C、汇编语言 D、机器语言 5、MCS-5l单片机的堆栈区是设置在( c )中。

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