HX711的电子秤,12864液晶显示
单片机源程序如下:
- #include"reg51.h"
- /****************************************************************
- 环宇电子秤系统 stc89C52单片机控制
- 12864 LCD显示 制作日期:2015/06/25
- *****************************************************************/
- /****************************************************************
- LCD_12864 端口定义
- *****************************************************************/
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char CMDAddress,jian_ma,flag,jiao_flag,set_flag,price_flag;
- unsigned int heavy,price=1,money,alarm=500,jiao_zhun=1010; //相关变量定义 ,上限报警值初始值为500克
- unsigned char menu,jia,jian,confr,fu,menu_flag,exit;
- long data_num,data_temp,data_flash;
- unsigned char f=0;
- sbit IRIN = P3^3; //红外接收器数据线
- sbit ADDO=P1^0; //ad采集数据接口
- sbit ADSK= P1^1; //ad采集时钟接口
- sbit RS=P2^3;
- sbit RW=P2^4; //液晶接口定义
- sbit EN=P2^5;
- //sbit rst=P2^7;
- sbit bell=P3^6; //蜂鸣器定义
- sbit key=P2^7; //按键定义
- #define Imax 14000 //此处为晶振为12时的取值, 红外解码
- #define Imin 8000 //如用其它频率的晶振时,
- #define Inum1 1450 //要改变相应的取值。
- #define Inum2 700
- #define Inum3 3000
- unsigned char Im[4]={0x00,0x00,0x00,0x00};
-
- unsigned long m,Tc;
- /****************************************************************
- *****************************************************************/
- unsigned char code table1[]="★★欢迎光临★★环宇电子称系统 "; //液晶显示内容
- //如果需要其他显示内容只需要修改汉子内容
- //但是汉子数量要一致,重新编译即可
- void read_count() //ad采集函数
- {
- unsigned long count;
- unsigned char i;
- ADSK=0;//使能ad
- count=0;
- while(ADDO); //等待ad转换结束
- for(i=0;i<24;i++)
- {
- ADSK=1; //PD_SCK置高,发送脉冲
- count=count<<1;
- // delayp();
- ADSK=0; //pd_sck置低
- if(ADDO)count++;
- }
- ADSK=1;
- count=count^0x800000; //第25个脉冲下降沿来时,转换数据
- // delayp();
- ADSK=0;
- data_num=count; // 读出来的数据赋值给变量data_num
- }
- void delay_ms(unsigned char x) //x*0.14MS
- {
- unsigned char i;
- while(x--)
- {
- for (i = 0; i<13; i++) {}
- }
- }
- void delay(uint t) //延时函数
- {
- uint x,y;
- for(x=t;x>0;x--)
- for(y=12;y>0;y--);
- }
- void display(uint Temp,uint k1,uint k2 ) // 显示重量,单价,金额
- {
- uint t1,t2,t3,t4 ; //,t0,t1,t2
- if(!menu_flag) //没有按键按下
- {
- t1=Temp/1000%10;
- t2=Temp/100%10;
- t3=Temp/10%10;
- t4=Temp%10;
- write_cmd(0x93);
- if(t1) //千位的显示
- {
- write_date(0x30+t1);
- write_date(0x30+t2);
- write_date(0x30+t3);
- write_date(0x30+t4);
- }
- void sao_miao()//按键扫描函数
- {
- if(key==0)
- {
- delay(10);
- if(!key)
- {
- while(!key);
- read_count();
- delay(500);
- read_count();
- data_temp=data_num; //重新读取ad采集值,进入清零功能
- }
- }
- }
- /****************************************************************
- 主函数
- *****************************************************************/
- void main()
- {
- uchar i=0;
- IRIN=1; //I/O口初始化
- m=0;
- f=0;
-
- IT1=1;
- EX1=1; //开外部中断
-
- TMOD=0x11; //定时器方式
- TH0=0;
- TL0=0;
- TR0=1; //开定时器
- EA=1; //开总中断
- P0=0;
- delay(50);
- init(); // 初始化
- delay(100);
-
- write_word(table1); // 进入欢迎界面
- for(i=10;i>0;i--)
- delay(3000); // 每一屏显示秒钟
- write_cmd(0x00); // 清屏
- show() ; //显示初始化
- read_count(); //ad采集函数
- delay(3000);
- read_count(); //ad采集函数
- delay(3000);
- read_count(); //ad采集函数
- data_temp=data_num; //采集数据赋值给临时变量 data_temp
- while(1)
- {
- read_count();
- if(data_num>=data_temp) // 比较采集出来的数值与临时变量
- data_num=(data_num-data_temp);
- else
- {
- data_num=(data_temp-data_num);
- if(data_num>=500)
- {
- fu=1;
- }
- else
- {
- fu=0;
- data_num=0;
-
- }
-
- }
-
-
-
- heavy=(unsigned int)(data_num/jiao_zhun);//1677; //计算重量
- delay(500);
-
-
-
- data_flash=heavy*price; // 总价=单价*重量
- money=(unsigned int)data_flash;
- if(exit) //如果进行了设置
- {
- exit=0;
- show() ; //显示刷新
- }
- display(heavy,price,money); //计算完成后送到液晶显示
- delay(500);
- chu_li(); //扫描函数
- if(heavy>alarm) //重量超过上限报警
- {
- beep();
- }
- delay(500);
- }
- }
- //外部中断解码程序
- void intersvr1(void) interrupt 2 using 1
- {
- Tc=TH0*256+TL0; //提取中断时间间隔时长
- TH0=0;
- TL0=0; //定时中断重新置零
- if((Tc>Imin)&&(Tc<Imax)) //定时器判断读取的启始码正确
- {
- m=0;
- f=1;
- return;
- } //找到启始码
- if(f==1)
- {
- if(Tc>Inum1&&Tc<Inum3)
- {
- Im[m/8]=Im[m/8]>>1|0x80; m++;
- }
- if(Tc>Inum2&&Tc<Inum1)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
电子称12864显示.rar
(65.64 KB, 下载次数: 48)
|