ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:17.94KB ,
资源ID:10439141      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10439141.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(12电子秤程序.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

12电子秤程序.docx

1、12电子秤程序程序 /*头文件*/#include#include#include#include#define uchar unsigned char#define uint unsigned int#define delayNOP(); _nop_();_nop_();_nop_();_nop_();#define AD_data P1 /AD数据口#define LCD_data P0 /液晶数据口/*函数声明*/void display_weigh ();void Alarm();void AD_0809();void lcd_init();void clr_screen();void

2、 bytecode();void fitle();void funkey();unsigned char keyscan();/*定义变量*/sbit LCD_RS = P30; /寄存器选择输入 sbit LCD_RW = P31; /液晶读/写控制sbit LCD_EN = P32; /液晶使能控制sbit led=P35; sbit bell=P34;sbit AD_EOC=P33; /A/D转换接口sbit ST=P36; /A/D转换启动sbit OE=P37; /A/D输出允许unsigned char ab8=0;/unsigned char abc4=0;unsigned ch

3、ar ptr4=0;unsigned char ptrl4=0;int i;int m,n;float ss; int j;int zhongliang;uint danjia;int YZ=5000; /初始阈值为5unsigned int getdata;float VOL;unsigned char rekey=0,ge=0,shi=0,xiaoshu=0;unsigned char setflag=0,fuwei;float x5=0.00,0.00,0.00,0.00,0.00;uchar code DIS1=西安科技大学;uchar code DIS2=毕业设计课题;uchar c

4、ode DIS3=多功能电子称;uchar code DIS4=康昊 张晨;uchar aDIS1=重量:;uchar aDIS2=k,g;uchar bDIS1=单价:;uchar bDIS2=元/Kg;uchar cDIS1=金额:;/*函数名称: AD_0809函数功能: 数模转换*/void AD_0809() OE = 0; /输出禁止 _nop_(); _nop_(); ST = 0; /启动转换 _nop_(); _nop_(); ST = 1; _nop_(); /保证足够的上升沿 ST = 0; while(!AD_EOC); /等待输出 OE = 1; /输出允许 P1=0

5、xFF; getdata=P1; _nop_(); _nop_(); _nop_(); _nop_(); VOL=4.44*getdata/256; /ADC0809实际基准电压为4.44 /*延时函数 */void delay(int ms) while(ms-) uchar i; for(i=0;i150;i+) _nop_(); _nop_(); _nop_(); _nop_(); /*检查LCD忙状态lcd_busy为1时,忙,等待;lcd_busy为0时。闲,可写指令与数据。 */bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; L

6、CD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); /*写指令数据到LCD RS=L,RW=L,E=高脉冲,D0-D7=指令码。*/void lcd_wcmd(uchar cmd) while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*写显示数据到LCD RS=H,RW=L,E=高脉冲,D

7、0-D7=数据。*/void lcd_wdat(uchar dat) while(lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*LCD初始化设定*/void lcd_init() / LCD_PSB = 1; /并口方式 /LCD_RST = 0; /液晶复位 delay(3); / LCD_RST = 1; delay(3); lcd_wcmd(0x34); /扩充指令操作 delay(5); lcd_wcmd(0x30);

8、 /基本指令操作 delay(5); lcd_wcmd(0x0C); /显示开,关光标 delay(5); lcd_wcmd(0x01); /清除LCD的显示内容 delay(5);/*设定显示位置 */void lcd_pos(uchar X,uchar Y) uchar pos; if (X=1) X=0x80; else if (X=2) X=0x90; else if (X=3) X=0x88; else if (X=4) X=0x98; pos = X+Y ; lcd_wcmd(pos); /显示地址 /* * 闪烁函数 * */void lcdflag() lcd_wcmd(0x0

9、8); delay(300); lcd_wcmd(0x0c); delay(300); lcd_wcmd(0x08); delay(300); lcd_wcmd(0x0c); delay(300); lcd_wcmd(0x08); delay(100); lcd_wcmd(0x0c); delay(50); lcd_wcmd(0x01); delay(50);/*清屏函数 */void clr_screen() lcd_wcmd(0x34); /扩充指令操作 delay(5); lcd_wcmd(0x30); /基本指令操作 delay(5); lcd_wcmd(0x01); /清屏 dela

10、y(5); /*显示字符表代码 */void bytecode() uchar s; clr_screen(); /清屏 lcd_wcmd(0x80); /设置显示位置为第一行 for(s=0;s16;s+) lcd_wdat(0x30+s); lcd_wcmd(0x90); /设置显示位置为第二行 for(s=0;s16;s+) lcd_wdat(0x40+s); lcd_wcmd(0x88); /设置显示位置为第三行 for(s=0;s16;s+) lcd_wdat(0x50+s); lcd_wcmd(0x98); /设置显示位置为第四行 for(s=0;s16;s+) lcd_wdat(

11、0x60+s); /*将数值转换成可显示函数 */ void Trans_val(float hhh ) zhongliang=(int)(hhh*2); Alarm(); ptr0 = 2+zhongliang /10; ptr1 = 2+zhongliang %10; ptr2 = 0; zhongliang=(int)(hhh*2000); ptr3=2+zhongliang%1000/100; ptr4=2+zhongliang%100/10; ptr5=2+zhongliang%10; /zhongliang=(int)(hhh*2); Alarm();/*函数名称: display

12、_open函数功能: 开机正常显示界面*/void display_open() lcd_pos(1,1); /设置显示位置为第一行 for(i=0;i12;i+) lcd_wdat(DIS1i); delay(30); lcd_pos(2,1); /设置显示位置为第二行 for(i=0;i12;i+) lcd_wdat(DIS2i); delay(30); lcd_pos(3,1); /设置显示位置为第三行 for(i=0;i12;i+) lcd_wdat(DIS3i); delay(30); lcd_pos(4,1); /设置显示位置为第四行 for(i=0;i12;i+) lcd_wda

13、t(DIS4i); delay(30); delay(500); /*函数名称: display_right函数功能: 开机正常显示界面*/void display_right() lcd_pos(1,1); /设置显示位置为第一行 for(i=0;i12;i+) lcd_wdat(DIS3i); /delay(300); lcd_pos(2,0); /设置显示位置为第二行 for(i=0;i6;i+) lcd_wdat(aDIS1i); delay(30); lcd_pos(2,7); for(i=0;i2;i+) lcd_wdat(aDIS2i); /delay(300); lcd_pos

14、(3,0); /设置显示位置为第三行 for(i=0;i6;i+) lcd_wdat(bDIS1i); /delay(300); lcd_pos(3,5); for(i=0;i5;i+) lcd_wdat(bDIS2i); /delay(300); lcd_pos(4,0); /设置显示位置为第四行 for(i=0;i6;i+) lcd_wdat(cDIS1i); /delay(300); lcd_pos(4,7); /设置显示位置为第四行 for(i=0;iYZ) /重量大于阈值 led=1; /发光二极管点亮 delay(10); bell=0; /蜂鸣器响 delay(10); if(z

15、hongliangYZ) /重量小于阈值 led=0; /发光二极管熄灭 delay(10); bell=1; /蜂鸣器不响 delay(10); /*函数名称: display_weigh 函数功能: 电子秤显示界面*/void display_weigh() uint i; Trans_val(ss); /数据分离 for(i=0;i5;i+) ptri=ptri+0x2e;/ 更新数据 lcd_pos(2,3); /设置显示位置为第一行 for(i=0;i5;i+) lcd_wdat(ptri); /delay(300); /*函数名称:filter 函数功能:滤波*/float fil

16、ter() unsigned char i; float sum=0.00; for(i=0;i5;i+) sum+=xi; sum=sum/5; return sum; /*函数名称: fun_key 函数功能:单价输入*/ void funkey() fuwei=1; n=0; m=0; shi=0;ge=0;xiaoshu=0; setflag=0; while(setflag=0) rekey=keyscan(); if(rekey=16) clr_screen();display_open(); delay(500); clr_screen(); display_right();se

17、tflag=1;ab8=0;ptrl4=0;fuwei=1; ptr8=0; lcd_pos(3,3); /设置显示位置为第一行 for(i=0;i4;i+) lcd_wdat(0x20); delay(10); lcd_pos(4,3); /设置显示位置为第一行 for(i=0;i8;i+) lcd_wdat(0x20); delay(10); if(rekey=12) clr_screen(); display_right();setflag=1;ab8=0;ptrl4=0;fuwei=0; lcd_pos(3,3); /设置显示位置为第一行 for(i=0;i4;i+) lcd_wdat

18、(0x20); delay(15); lcd_pos(4,3); /设置显示位置为第一行 for(i=0;i=1&rekey4)break; lcd_pos(3,3); /设置显示位置为第一行 for(i=0;i4)break; lcd_pos(3,3); /设置显示位置为第一行 for(i=0;in;i+) lcd_wdat(ptrli); delay(5); if(rekey=14) n-; lcd_pos(3,3); /设置显示位置为第一行 for(i=0;i4;i+) lcd_wdat(0x20); delay(5); lcd_pos(3,3); /设置显示位置为第一行 for(i=0

19、;in;i+) lcd_wdat(ptrli); delay(5); if(rekey=13) lcd_pos(3,3); /设置显示位置为第一行 for(i=0;in;i+) lcd_wdat(ptrli); delay(50); setflag=1;fuwei=0; if(rekey=15) fuwei=1;setflag=1; if(fuwei=1) lcd_pos(4,3); /设置显示位置为第一行 for(i=0;i8;i+) lcd_wdat(0x20); delay(10); if(fuwei=0) if(setflag=1) if(m=0)xiaoshu=ab1; if(m=1)ge=ab0;xiaoshu=ab2; if(m=2)shi=ab0;ge=ab1;xiaoshu=ab3; danjia=shi*10+ge+xiaoshu*0.1; / (ptr3-2) /zhongliang=zhongliang*10; /danjia=1; /zhongliang=8900; /zhongliang=ptr0*1000+ptr1*100+ptr2*10+ptr3; /zhongliang=zhongliang*10; /danji

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1