高精密家用电子秤C程序Word格式.docx
《高精密家用电子秤C程序Word格式.docx》由会员分享,可在线阅读,更多相关《高精密家用电子秤C程序Word格式.docx(12页珍藏版)》请在冰点文库上搜索。
![高精密家用电子秤C程序Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/cdfc6502-b148-450c-a3af-4d2086bcd341/cdfc6502-b148-450c-a3af-4d2086bcd3411.gif)
uints=0,y=0;
//s用于保存小数点,y判断ENTER键
//===========================================
//函数声明
voiddelay(char);
voidwrite_data(char);
voidwrite_text(char);
voidwrite_com(char);
voidlcd_init_text();
voidtext_out(chara);
intasc2lcd(intasc);
voidcursor_on();
voidprint_text();
voidtext_location();
voidprint_string();
voidKey_Scan(void);
//--------------------------------------------
//写数据函数
voidwrite_data(chardat){
CD=0;
//数据
CE=0;
//LCD使能
WRIT=0;
//写
DATA_PORT=dat;
//把数据送到P口
delay
(1);
//当晶振较高时加延时
WRIT=1;
//关写
CE=1;
//关使能
}
voidwrite_text(chartext){
DATA_PORT=text;
//写命令函数
voidwrite_com(charcom){
CD=1;
//命令
DATA_PORT=com;
//LM4229初始化函数
voidlcd_init_text(){
write_data(0);
write_com(0x40);
//settexthomeaddress
write_data(30);
write_com(0x41);
//settextarea;
write_com(0x84);
//textattributemode
write_com(0x94);
//textongraphicoff
voidcursor_on(){
write_com(0xA0);
write_com(0x93);
voidprint_text(charx,chary,chara){
intplace;
place=x*30+y;
write_data(place&
0xff);
//写地址低8位
write_data(place/256);
//写地址高8位
write_com(0x24);
//设置地址
write_com(0xb0);
//设置数据自动写
write_text(a);
write_com(0xb2);
//自动复位
intasc2lcd(intasc){
uintr;
r=asc-32;
returnr;
voidtext_out(chara){
voidtext_location(intplace){
voidprint_string(char*str){
inti;
intch;
for(i=0;
str[i]!
=0;
i++)
{
ch=asc2lcd(str[i]);
text_out(ch);
//延时函数
voiddelay(uchart)
uintp,j;
for(p=0;
p<
t;
p++)
for(j=0;
j<
114;
j++);
//-------------------------------------------
//4*4矩键查寻键值函数
voidKey_Scan(void)
ucharreadkey;
uintx=200;
ucharx_temp,y_temp;
P3=0x0f;
x_temp=P3&
0x0f;
if(x_temp==0x0f)gotokeyout;
P3=0xf0;
y_temp=P3&
0xf0;
readkey=x_temp|y_temp;
readkey=~readkey;
switch(readkey){
case0x11:
break;
case0x21:
case0x41:
case0x81:
i=0;
s=0;
total=0;
y=1;
i=1;
b[0]=0;
delay(x);
//CANCEL键;
case0x12:
b[i]=3;
i++;
case0x22:
b[i]=6;
case0x42:
b[i]=9;
case0x82:
if(s==0)s=i;
//确认键
case0x14:
b[i]=2;
case0x24:
b[i]=5;
i++;
case0x44:
b[i]=8;
case0x84:
b[i]=14;
s=i;
//小数点
case0x18:
b[i]=1;
case0x28:
b[i]=4;
case0x48:
b[i]=7;
case0x88:
b[i]=0;
default:
keyout:
_nop_();
//读TLC2543端口数据函数
uintreadAD(ucharport)
ucharch,i,j;
uintad;
ch=port;
1;
j++)
{
ad=0;
ch=port;
EOC=1;
CS=1;
CS=0;
CLK=0;
for(i=0;
i<
16;
{
if(ADout)ad|=0x01;
ADin=(bit)(ch&
0x80);
//取到ch的最高位
CLK=1;
CLK=0;
ch<
<
=1;
ad<
}
}
CS=1;
/////////转换和读取数值
while(!
EOC);
ad>
>
return(ad);
//main函数
main(){
uintA1,A2,A3,A4;
//A1——A4为重量
uintB0,B1,B2,B3,B4;
//B0——B4为总价
uintj;
while
(1){
Key_Scan();
dat=readAD(0x0c);
A1=(dat*122)/100000;
//12位端口最大数4096和5000g之间有1.22的倍数关系;
A2=(dat*122)%100000/10000;
A3=(dat*122)%10000/1000;
A4=(dat*122)%1000/100;
//显示重量
//-------------------------------------------
lcd_init_text();
text_location(0);
print_string("
weight:
"
);
text_out(A1+16);
text_out(14);
text_out(A2+16);
text_out(A3+16);
text_out(A4+16);
kg"
//显示单价Price
text_location(60);
Price:
"
for(j=0;
i;
j++){
if(b[j]==14)
text_out(b[j]);
else
text_out(b[j]+16);
if(i==1){
for(j=i;
15;
text_out(0xff);
//当ENTER键按下后,显示总价
if(y==1){
if(s==0){
if(i>
=2)
total+=dat*122*b[1]/10;
if(s==1){
total+=dat*122*b[0];
=3)
total+=dat*122*b[2]/10;
if(s==2){
total=total+dat*122*b[0]*10+dat*122*b[1];
=4)
total+=dat*122*b[3]/10;
B0=(total)/10000000;
B1=(total)%10000000/1000000;
B2=(total)%1000000/100000;
B3=(total)%100000/10000;
B4=(total)%10000/1000;
text_location(120);
print_string("
Total:
text_out(B0+16);
text_out(B1+16);
text_out(B2+16);
text_out(14);
text_out(B3+16);
text_out(B4+16);
y=0;
i=0;
s=0;
total=0;
delay(100);