《2022年电子称C语言程序 .pdf》由会员分享,可在线阅读,更多相关《2022年电子称C语言程序 .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、下面介绍 main.c主程序编写,其他程序略。(1) 头文件和一些宏定义#include #include #include #include lcd.h #include hx711.h #include keyboard.h /定义量程系数#define RATIO 2114/1623 /定义标识volatile bit FlagTest = 0; /定时测试标志,每0.5 秒置位,测完清0 volatile bit FlagKeyPress = 0; /有键按下标志,处理完毕清0 volatile bit FlagSetPrice = 0; /价格设置状态标志,设置好为1。/管脚定义sb
2、it LedA = P22; sbit beep = P10; sbit alert = P11; /显示用变量int Counter; uchar idata str16 = 000000; int i, iTemp; /称重用变量unsigned long idata FullScale; / 满量程 AD值/1000unsigned long AdV al; /AD 采样值unsigned long weight; /重量值,单位g unsigned long idata price; /单价,长整型值,单位为分unsigned long idata money; /总价,长整型值,单位
3、为分/键盘处理变量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-6553
4、6 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - void int2str(int x, char* str) int i=1; int tmp=10; while(x/tmp!=0) i+; tmp*=10; tmp=x; stri=0; while(i1) str-i=0+(tmp%10); tmp/=10; str0=tmp+0; /重新找回零点,每次测量前调用void To_Zero() FullScale=ReadC
5、ount()/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) displ
6、ay_GB2312_string(5,60,str1); else display_GB2312_string(5,68,str1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - /显示小数点display_GB2312_string(5,76,.); /显示小数部分int2str(j,str1); if (j=10) display_GB2312_string(3,60,str1); else display_GB2312
7、_string(3,68,str1); display_GB2312_string(3,76,.); int2str(j,str1); if (j10) display_GB2312_string(3,84,00); display_GB2312_string(3,100,str1); else if (j999999) /超出显示量程 display_GB2312_string(7,44,-); return; i = money/100; /得到整数部分j = money - i*100;/ 得到小数部分int2str(i,str1); /显示整数部分if (i=1000) display
8、_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= 200) FlagTest = 1; Counter = 0; /按键响应程序,参数是键值/返回键值:/ 7 8 9 10(清 0)
9、/ 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) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -
10、- - - - - - 第 5 页,共 8 页 - - - - - - - - - /最多只能设置到千位if (price0 x8000) 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; 名师资料总结 - - -精品资料欢迎下载 - - - - - -
11、 - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 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 (keycode16)&(FlagKeyPress=0) FlagKeyPress = 1; KeyPress(keycode); FlagKeyPress = 0; delay(20); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -