基于51单片机数字电子称程序
外围电路:ADC0804,24C02,1602 主函数部分参考下,其他的就不用加加
#include #include #include"1602.h" #include"24c02.h"
#define uint unsigned int #define uchar unsigned char
sbit adrd=P3^7; //IO口定义 sbit adwr=P3^6; sbit adcs=P0^7; sbit diola=P2^5; sbit beep=P2^3; sbit setkey=P3^7;
uchar key_num,num;
uchar RMB_s,RMB_g,RMB; long date,ren,dat; int add_i2c,bianma;
uchar code table[]="0123456789"; uchar table1[4];
/******************************************************************** 蜂鸣器驱动
********************************************************************/ void BEEP() { uchar i; for(i=0;i
/******************************************************************** ADC0804 起始信号
********************************************************************/ void ad_start()
{
adcs=0; _nop_(); adwr=0; _nop_(); adwr=1; _nop_(); adcs=1; }
/******************************************************************** ADC0804 读操作
********************************************************************/ uchar ad_read() {
uchar temp; adcs=0; _nop_(); adrd=0; _nop_(); temp=P1; _nop_(); adrd=1; _nop_(); adcs=1;
return(temp); }
/******************************************************************** 矩阵键盘扫描
********************************************************************/ uchar getkey() { static unsigned char flag = 0; unsigned char key; P3=0x0f; if(P3!=0x0f) { if(flag==0) { flag=1; //松手检测
key=P3|0xf0; P3=key; switch(P3) { case 0xee:return 0; break; case 0xde:return 1; break; case 0xbe:return 2; break; case 0x7e:return 3; break; case 0xed:return 4; break; case 0xdd:return 5; break; case 0xbd:return 6; break; case 0x7d:return 7; break; case 0xeb:return 8; break; case 0xdb:return 9; break; case 0xbb:return 10;break; case 0x7b:return 11;break; case 0xe7:return 12;break; case 0xd7:return 13;break; case 0xb7:return 14;break; case 0x77:return 15;break; } } } else { flag=0; } return 0xff; }
/******************************************************************** 控制按键设置
********************************************************************/ void keyscan() { static uchar i=0,flag = 0,flag1=0,flag2=0; static bit flag_frist = 1; static uchar p; uchar pri; num = getkey();
{ if((num>=0)&&(num
{ // } } else { { display(0xc4,table[RMB_s]); } RMB=RMB_s*10+RMB_g; } }
////////////////////////////////////////// if(num==10) {
flag1=1; if(i==0) { Lcd_dis_str(12,1,"____"); Lcd_dis_str(4,2,"00"); } display(0x8c+i,table[num]); table1[i]=num; i++; if(i==4) { i=0; if(flag_frist) RMB_s = num; flag_frist = 0; else { RMB_g = num; flag_frist = 1; flag = 0; flag1=0; display(0xc5,table[RMB_g]); }
{ flag2=1; flag1=1; Lcd_dis_str(12,1," "); } else { flag2=0; flag1=0; Lcd_dis_str(12,1,"____"); } }
///////////////////////////////////////////// if(num==15) { flag = 1; Lcd_dis_str(4,2," "); }
//////////////////////////////////////////////// if(num==12) { RMB=0; Lcd_dis_str(12,1,"____"); Lcd_dis_str(4,2,"00"); Lcd_dis_str(11,2,"00.00"); }
///////////////////////////////////////////////////// if(num==11) { write_24c02(add_i2c,RMB); Lcd_dis_str(4,2,"OK"); delay1(600); p=read_24c02(add_i2c); display(0xc4,table[p/10]); display(0xc5,table[p%10]); }
///////////////////////////////////////////////////// if(num==14) { pri=read_24c02(add_i2c); RMB=pri; display(0xc4,table[pri/10]); display(0xc5,table[pri%10]);
} ////////////////////////////////////////////////////// if((num>=0)&&(num
void datdeal() { bianma=table1[0]*1000+table1[1]*100+table1[2]*10+table1[3]; add_i2c=bianma+1; }
/******************************************************************** 显示函数
********************************************************************/ void Lcd1602_dis() { date=ad_read(); date=date*1000/255; ren=date*RMB; display(0x85,table[date/100]) ; //重量 Lcd_dis_char(6,1,'.'); display(0x87,table[date%100/10]); display(0x88,table[date%10]); display(0xcb,table[ren/1000]) ; //总额 display(0xcc,table[ren%1000/100]); Lcd_dis_char(13,2,'.');
//改变
display(0xce,table[ren%1000%100/10]); display(0xcf,table[ren%10]); if(date>=500) BEEP(); //超重报警 }
void dis_init() { lcd_init(); Lcd_dis_str(5,1,"WELCOME"); Lcd_dis_str(2,2,"QQ:469790714"); delay1(500); Lcd_clean(); delay(1); Lcd_dis_str(0,1,"Heft:"); Lcd_dis_str(0,2,"RMB:"); Lcd_dis_str(7,2,"ALL:"); Lcd_dis_str(9,1,"Kg"); Lcd_dis_str(12,1,"____"); Lcd_dis_str(4,2,"00"); }
/******************************************************************** 主函数
********************************************************************/ void main() { dis_init(); while(1) { ad_start() ; delay1(100); Lcd1602_dis(); keyscan(); datdeal(); } }