液体点滴速度监控装置设计的程序.docx

上传人:小飞机 文档编号:3634099 上传时间:2023-03-14 格式:DOCX 页数:13 大小:39.79KB
返回 下载 相关 举报
液体点滴速度监控装置设计的程序.docx_第1页
第1页 / 共13页
液体点滴速度监控装置设计的程序.docx_第2页
第2页 / 共13页
液体点滴速度监控装置设计的程序.docx_第3页
第3页 / 共13页
液体点滴速度监控装置设计的程序.docx_第4页
第4页 / 共13页
液体点滴速度监控装置设计的程序.docx_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《液体点滴速度监控装置设计的程序.docx》由会员分享,可在线阅读,更多相关《液体点滴速度监控装置设计的程序.docx(13页珍藏版)》请在三一办公上搜索。

1、液体点滴速度监控装置设计的程序#include #define DB0_DB7 P0 #define busy 0x80 #define SCANPORT P1 sbit E=P22; sbit RW=P21; sbit RS=P20; /1110 1111, 1101 1111, 1011 1111, 0111 1111 unsigned char uca_LineScan4=0xEF,0xDF,0xBF,0x7F; /列线扫描电压分为第1,2,3,4根列线 unsigned char key_ctt4=0; unsigned char speed_bcd4=0; unsigned char

2、 speed_sc2; unsigned char yy=0,temp; unsigned int speed_ck4=0; unsigned int di_xx2=0; unsigned int ct=0,ttb=0,xx=0,tt3=0,speedct=0,speed=0,speedcd=10,cott=0; unsigned int time_sq4=0; typedef unsigned char uchar; unsigned char code lcd3=0123456789abcdef; unsigned char code lcdnow=NOW:000; unsigned ch

3、ar code lcdset=SET:000; unsigned char CONTROL8=0x38,0x18,0x98,0x88,0xC8,0x48,0x68,0x28; unsigned char codes18=0xb8,0x98,0xd8,0xc8,0xe8,0x68,0x78,0x38;/9,18,36,45,54,63,72,81度顺时针 unsigned char codes28=0xb8,0x98,0xd8,0xc8,0xe8,0x68,0x78,0x38;/9,18,36,45,54,63,72,81度逆时针 unsigned char counts,pt; unsigne

4、d char uc_KeyTemp=0; unsigned char uc_ClickCount=0; unsigned char ucCount; bit flag=1; /度数,正反转,速度控制 bit a_ac=0;/比较系统标志 bit bleept=0;/报警标准 bit moto=0;/电机标志位 bit a_key=0; bit b_key=0; void vKeyProcess(unsigned char ucKeyCode); void bleep;/报警 void ac;/电机速度比校 void akey;/功能处理 void getspeed;/速度检侧 void std

5、isplay;/显示 void Delay(unsigned int t); void delay_50ms(unsigned int t); /延时 void SendCommand(unsigned char ch); /发送命令 void vWriteData(unsigned char ch); /发送数据 void InitLcd; /初始化 void DisplayOneChar(unsigned char x,unsigned char y,unsigned char ddata);/按指定位置显示一个字符 void DisplayListChar(unsigned char x

6、,unsigned char y,unsigned char *DData);/按指定位盆显示一串字符 /= /= void Delay (unsigned int t) /delay 40us /for(;t!=0;t-); while(t-); void deley_50ms(unsigned int t) unsigned int j; /可以在此加少许延时补偿,以称补大数值传递时(如delay_50ms(1000)造成的误差,但付出的代价是造成传递小数值/(delay_50ms(1)造成更大的误差。因为实际应用更多时候是传递小数值,所以补建议加补偿! for(;t!=0;t-) for

7、(j=6245;j0;j-); /= /= void SendCommand(unsigned char ch) /发送命令 /*CheckBusy;*/ RS=0; RW=0; DB0_DB7=ch; E=1; Delay(1); E=0; Delay(5); /delay 40us /= /= void vWriteData(unsigned char ch) /发送数据 /*CheckBusy;*/ RS=1; RW=0; DB0_DB7=ch; E=1; Delay(1); E=0; Delay(5); /delay 40us /= /= void InitLcd /初始化 SendC

8、ommand(0x38); Delay(1); SendCommand(0x08); /设置工作方式 Delay(1); SendCommand(0x01); /显示状态设置 Delay(1); SendCommand(0x06); /清屏 Delay(1); SendCommand(0x0c); /输入方式设置 Delay(1); /= /= void DisplayOneChar(unsigned char x,unsigned char y,unsigned char ddata) /按指定位置显示一 /个字符 y&=0x1; x&=0xf; /限制X不能大于15,Y不能大于1 if(y

9、) x|=0x40;/当要显示第二行时,地址码+0x40; x|=0x80;/算出指令码 SendCommand(x); vWriteData(ddata); /= /= void DisplayListChar(unsigned char x,unsigned char y,unsigned char *DData) /按指定位盆显示一串字符 unsigned char ListLength; ListLength=0; y&=0x1; x&=0xf; /限制X不能大于15,Y不能大于1 while(DDataListLength0x20) if(x=0xf) DisplayOneChar(

10、x,y,DDataListLength); /显示单个字符 ListLength+; x+; /= /= void vShowOneChar(unsigned char ucChar) switch(ucChar) case 0:vWriteData(0x30);break; case 1:vWriteData(0x31);break; case 2:vWriteData(0x32);break; case 3:vWriteData(0x33);break; case 4:vWriteData(0x34);break; case 5:vWriteData(0x35);break; case 6

11、:vWriteData(0x36);break; case 7:vWriteData(0x37);break; case 8:vWriteData(0x38);break; case 9:vWriteData(0x39);break; case a:vWriteData(0x61);break; case b:vWriteData(0x62);break; case c:vWriteData(0x63);break; case d:vWriteData(0x64);break; case e:vWriteData(0x65);break; case f:vWriteData(0x66);bre

12、ak; default:break; /= /= unsigned char ucKeyScan unsigned char ucTemp=0;/扫描状态暂存 unsigned char ucRow=0,ucLine=0;/行号 列号 for(ucLine=0;ucLine4;ucLine+)/列扫描 SCANPORT=uca_LineScanucLine; /输出扫描电位 ucTemp=SCANPORT&0x0f;/ 输出扫描电位 并屏蔽高4位 if(ucTemp!=0x0f) switch(ucTemp) case 0x0e:ucRow=10;break;/如果有 则判断行号 case 0

13、x0d:ucRow=20;break; case 0x0b:ucRow=30;break; case 0x07:ucRow=40;break; default: ucRow=50;break; break; / SCANPORT=0x0f;/恢复P2口 return ucRow+ucLine+1;/返回按键编码 格式为2位数 高位为行号 地位为列号 /= /= void vKeyProcess(unsigned char ucKeyCode) SendCommand(0xc4+uc_ClickCount); if(a_key=1) switch(ucKeyCode) case 41:vShow

14、OneChar(7);temp=7;break; case 42:vShowOneChar(8);temp=8;break; case 43:vShowOneChar(9);temp=9;break; case 31:vShowOneChar(4);temp=4;break; case 32:vShowOneChar(5);temp=5;break; case 33:vShowOneChar(6);temp=6;break; case 21:vShowOneChar(1);temp=1;break; case 22:vShowOneChar(2);temp=2;break; case 23:v

15、ShowOneChar(0);temp=0;break; case 12:vShowOneChar(7);temp=7;break; SendCommand(0xc4+uc_ClickCount); SendCommand(0x0f); switch(ucKeyCode) case 44:/*vShowOneChar(c);*/temp=12;break;/ case 34:/*vShowOneChar(d);*/temp=13;break;/* case 24:/*vShowOneChar(e);*/temp=14;break; /- case 14:/*vShowOneChar(f);*/

16、temp=15;break;/+ case 13:/*vShowOneChar(b);*/temp=11;break;/= case 11:/*vShowOneChar(a);*/temp=10;break;/ON/C default:break; if(temp=11)/判断按键与上一次所按的键是否相同 delay_50ms(10); if(uc_ClickCount255)/同一个按连续按下的次数:1255 uc_ClickCount+; SendCommand(0xc3+uc_ClickCount); SendCommand(0x0f); if(uc_ClickCount=3) uc_C

17、lickCount=0; SendCommand(0xc4+ uc_ClickCount); SendCommand(0x0f); if(temp=9) switch(uc_ClickCount) case 0:key_ctt0=temp;break; case 1:key_ctt1=temp;break; case 2:key_ctt2=temp;break; default:break; /= /= void int_timer0(void) TMOD=0x10; TMOD=0x01; TH0=0x3c; TL0=0xb0; ET1=1; TR1=1; ET0=1; TR0=1; EA=1

18、; IT1=1; EX1=1; /= /= void Timer1 interrupt 3 TH1=0x3c; TL1=0xb0; pt+; if(pt=2) pt=0; if(flag=0&moto=1) P2=(P2&0x0f)|CONTROLcounts; if(flag=0&moto=0) P2=(P2&0x0f)|codes2counts; counts+; if(counts=8) counts=0; /= /= void Timer0 interrupt 1 TH0=0x3c; TL0=0xb0; yy+; if(yy=2) ct+; tt3+; yy=0; if(ct=600)

19、/60秒定时 ct=0; xx=0; if(tt3=20) tt3=0; di_xx1=di_xx0; di_xx0=xx; if(di_xx0=di_xx1)&a_ac=1) bleept=1;flag=1; /= /= void Int1interrupt 2 static cott=0; cott+; if(cott=2) xx+; time_sq2=time_sq1; time_sq1=time_sq0; time_sq0=ct; if(a_key=0) DisplayOneChar(10,0,lcd3speed/100); DisplayOneChar(11,0,lcd3speed%

20、100/10); DisplayOneChar(10,0,lcd3speed%10); DisplayOneChar(10,0,lcd3xx/100); DisplayOneChar(10,0,lcd3xx%100/10); DisplayOneChar(10,0,lcd3xx%10); SendCommand(0xc4+uc_ClickCount); getspeed; cott=0; /= /= void stdisplay DisplayListChar(0,0,lcdnow); DisplayListChar(0,1,lcdset); DisplayListChar(14,0,0x4f

21、); DisplayListChar(15,0,0x46); DisplayListChar(8,0, S:); DisplayListChar(8,1,T:); /= /= void main delay_50ms(1); int_timer0; InitLcd; P2_3=1; SCANPORT=0x0f; stdisplay; while(1) bleep; if(SCANPORT!=0x0f) for(ucCount=0;ucCount=(speedcd+5) moto=0; flag=0; else if(speedcd=(speedcd-5) moto=1; flag=0; els

22、e flag=1; /= /= void bleep if(a_ac=1) if(bleept=1) P2_3=0; if(bleept=0) P2_3=1; /= /= void akey if(a_key=1) SendCommand(0x0c); DisplayOneChar(14,0,0x4f); DisplayOneChar(15,0,0x4e);/On SendCommand(0xc4); SendCommand(0x0f); if(a_key=0) SendCommand(0x0c); DisplayOneChar(14,0,0x4f); DisplayOneChar(15,0,

23、0x46);/Of /= /= void getspeed if(a_ac=1) ac; ; speed=1200/(time_sq0-time_sq2); speed_ck3=speed_ck2; speed_ck2=speed_ck1; speed_ck1=speed_ck0; speed_ck0=speed; if(speed_ck0!=speed_ck1) speed_sc1=speed_sc0; speed_sc0=speed_sc0; speedct=(speed_sc0+speed_sc1)/2; else if(speed_ck0=speed_ck2)&(speed_ck1=s

24、peed_ck3) speedct=(speed_ck0+speed_ck1)/2; if(speed_ck0=speed_ck1)|(speed_ck0=speed_ck2) speedct=(speed_ck1+speed_ck2)/2; if(speed_ck0!=speed_ck1)&(speed_ck0!=speed_ck2)&(speed_ck1=speed_ck2) speedct=(speed_ck0+speed_ck1)/2; if(speed_ck0!=speed_ck1)&(speed_ck0!=speed_ck2)&(speed_ck1!=speed_ck2) spee

25、dct=(speed_ck0+speed_ck1 +speed_ck2+speed_ck4 )/4; speed_bcd2=speed/100; speed_bcd1 =speed%100/10; speed_bcd2=speed%10; if(a_key=0) DisplayOneChar(4,0,lcd3speedct/100); DisplayOneChar(5,0,lcd3speedct%100/10); DisplayOneChar(6,0,lcd3speedct%10); DisplayOneChar(4,1,lcd3speedct/100); DisplayOneChar(5,1,lcd3speedct/100); DisplayOneChar(6,1,lcd3speedct/100); SendCommand(0xc4+uc_ClickCount);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号