电子称C语言程序

合集下载

C语言程序设计全套教学教程完整版电子课件最全ppt电子教案

C语言程序设计全套教学教程完整版电子课件最全ppt电子教案

上一页 下一页
目录
8.1 指针的概念、定义和引用 8.1.1 指针的概念 8.1.2 指针变量的定义 8.1.3 指针变量的引用 8.2 指针与函数 8.2.1 指针变量作函数参数 8.2.2 返回值为指针的函数 8.2.3 通过指针调用函数
上一页 下一页
Hale Waihona Puke 目录8.3 指针与数组 8.3.1 指针与数组的关系 8.3.2 数组名作函数参数的指针解释 8.3.3 指针数组 8.3.4 多级指针 8.4 指针与字符串 8.4.1 字符串的表示形式 8.4.2 字符串指针作函数参数
2.汇编语言
汇编语言的指令与机器语言的指令基本上保持了一一对应的关系。与 机器语言比起来,汇编语言易记、易读、易检查、易修改,但却不能 被计算机直接识别和执行,必须由翻译程序翻译成机器语言程序后才 能执行。汇编语言仍然是面向特定计算机的语言,也仍然是低级语言
下一页
返回
1.1 程序设计语言概述
3.高级语言 高级语言是接近人类自然语言和数学语言的程序设计语言,具有以下
上一页 下一页
目录
5.2 do-while语句 5.3 for语句 5.4 break和continue语句 5.5 多重循环 5.6 综合应用举例 第6章 数组 6.1 数组概述 6.2 一维数组
上一页 下一页
目录
6.2.1 一维数组的定义 6.2.2 一维数组的引用 6.2.3 一维数组的初始化 6.2.4 一维数组的程序举例 6.3 二维数组 6.3.1 二维数组的定义 6.3.2 二维数组的引用 6.2.3 二维数组的初始化
翻译成目标程序,然后执行该目标程序。解释方式是把源程序逐句翻
上一页 下一页 返回
1.1 程序设计语言概述

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

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

《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转换器,显示电路一、系统整体描述系统由敏感元件、电桥测量电路、放大电路、模数转换电路、单片机最小系统、显示电路构成。

敏感元件产生物理量变化,由测量电路将信号转换为电信号,并放大输出。

通过模数转换后将信号输入单片机中,经过处理后由显示电路显示。

二、系统模块设计电阻应变式传感器的组成以及原理电阻应变式传感器是将被测量的力,通过它产生的金属弹性变形转换成电阻变化的元件。

由电阻应变片和测量线路两部分组成。

常用的电阻应变片有两种:电阻丝应变片和半导体应变片,本设计中采用的是电阻丝应变片,为获得高电阻值,电阻丝排成网状,并贴在绝缘的基片上,电阻丝两端引出导线,线栅上面粘有覆盖层,起保护作用。

电子称C语言程序

电子称C语言程序

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

(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);}}。

C语言程序设计项目式教程完整版课件全书电子教案教材课件完整

C语言程序设计项目式教程完整版课件全书电子教案教材课件完整

例如,有一函数
,编写程序,其功能是对已知 x 求 y
程序说明 ① if 和 else 后面的语句可以是复合语句。 ②注意 if 与 else 的配对原则,else 总是与前面离它最近的没成对的 if 成对。
简单的C语言程序结构
说明4——语句
C语言中以“;”作为语句结束的标志。函数体就是由若干语句组成的,同时语句也出现在 函数之间,示例代码如下所示:
简单的C语言程序结构
学习一种编程语言,最佳途径就是多阅读代码段,多编写程序代码,接下来通过最基本的 C语言程序的基本构成学习基本格式和书写规范,代码示例如下所示:
单一if结构
选择结构中最基本的分支结构是 if 语句,按形式分 if 语句可以分为单分支、双分支和多 分支等,单一 if 语句定义形式如下所示
当上述中“表达式”值为“逻辑真”时,执行“语句”中内容。例如计算整型变量 x 的 绝对值,示例代码如下所示:
If-else结构
if 语句的第二种形式为 if-else 结构的双分支。其定义形式如下所示 : 当“表达式”值为“逻辑真”时,执行“语句 1”;当“表达式”值为“逻辑假”时,执 行“语句 2”。例如,判断整型变量 x 是 5,则输出“right”,否则输出“error”,示例代码如 下所示:
简单的C语言程序结构
说明2——预处理
include称为文件包含命令,其意义是把双引号""或尖括号<>内指定的文件包含到本程序来, 成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h的头文件。C语言的 头文件中包括了各个标准库函数的函数原型。因此,凡是在程序中调用一个库函数时,都必 须包含该函数原型所在的头文,示例代码如下所示:
原型在头文件 “stdio.h”中。具体格式如下:

单片机C语言_电子时钟程序

单片机C语言_电子时钟程序

#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语言程序设计电子书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语言编程的指令集,它能够让程序员们在单片机系统里编写并实现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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

下面介绍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);}}。

相关文档
最新文档