下面介绍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。 //管脚定义 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 AdVal; //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_s...