毕业设计C代码基于单片机的烟叶水分测量仪(ADC0832 + 4x4key + 7segledx4).doc

上传人:仙人指路1688 文档编号:2385433 上传时间:2023-02-17 格式:DOC 页数:7 大小:22KB
返回 下载 相关 举报
毕业设计C代码基于单片机的烟叶水分测量仪(ADC0832 + 4x4key + 7segledx4).doc_第1页
第1页 / 共7页
毕业设计C代码基于单片机的烟叶水分测量仪(ADC0832 + 4x4key + 7segledx4).doc_第2页
第2页 / 共7页
毕业设计C代码基于单片机的烟叶水分测量仪(ADC0832 + 4x4key + 7segledx4).doc_第3页
第3页 / 共7页
毕业设计C代码基于单片机的烟叶水分测量仪(ADC0832 + 4x4key + 7segledx4).doc_第4页
第4页 / 共7页
毕业设计C代码基于单片机的烟叶水分测量仪(ADC0832 + 4x4key + 7segledx4).doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《毕业设计C代码基于单片机的烟叶水分测量仪(ADC0832 + 4x4key + 7segledx4).doc》由会员分享,可在线阅读,更多相关《毕业设计C代码基于单片机的烟叶水分测量仪(ADC0832 + 4x4key + 7segledx4).doc(7页珍藏版)》请在三一办公上搜索。

1、毕业设计C代码-基于单片机的烟叶水分测量仪(ADC0832 + 4x4key + 7segledx4)#include#include #include unsigned char code ying4=0xfe,0xfd,0xfb,0xf7;/阴极控制码unsigned char code yang11=0x00,0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/0-9数值码unsigned char code yang_point11=0x80,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0x

2、EF;/带小数点的0-9数值码unsigned char a,b,c,d,m,n;/显示数组用 unsigned char key;/键盘扫描键值 unsigned char scn;/键盘按键标志位unsigned int vrs=100;/默认水分与电压比例系数为1(放大100倍成100以便储存)unsigned int f1=300;/F1默认放大3倍(这里仅仅为了演示程序效果,倍数的默认设置应根据实际使用环境)unsigned int f2=400;/F2默认放大4倍unsigned int f3=2000;/F3默认放大20倍sbit ADCS =P14; /ADC0832 chip

3、 seclectsbit ADDI =P16; /ADC0832 k insbit ADDO =P17; /ADC0832 k outsbit ADCLK =P15; /ADC0832 clock signal/*延时子程序*/void delay(unsigned int t) /延时子程序:bt从0加到225,在12M晶体下CPU大概耗时1毫秒unsigned int bt;for(;t0;t-)for(bt=0;bt255;bt+); /*读ADC0832子程序*/unsigned char adc0832(unsigned char channel) unsigned char i=0

4、;unsigned char dat=0;unsigned char ndat=0;unsigned char j=0;/芯片初始化/if(channel=0)channel=2;/通道号10,只对CH0进行单通道转换/if(channel=1)channel=3;/通道号11,只对CH2进行单通道转换ADDI=1;/在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号ADCLK=0;/拉低CLK端_nop_();_nop_();ADCS=0;/拉低CS端,使能ADC0832_nop_();_nop_();ADCLK=1;/拉高CLK端_nop_();_nop_();ADCLK=0;/

5、拉低CLK端,形成下降沿1_nop_();_nop_();ADCLK=1;/拉高CLK端ADDI=channel&0x01;/在第2个脉冲下沉之前DI端应输入第1位通道选择数据_nop_();_nop_();ADCLK=0;/拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;/拉高CLK端ADDI=channel&0x02;/在第3个脉冲下沉之前DI端应输入第2位通道选择数据_nop_();_nop_();ADCLK=0;/拉低CLK端,形成下降沿3_nop_();_nop_(); /收数据for(i=0;i8;i+) ADCLK=1; _nop_(); _nop_()

6、; ADCLK=0;/形成第4-11个下降沿,从第四个下降沿开始接受最高位 _nop_(); _nop_(); dat=1;dat|=ADDO; for(i=0;i8;i+) j=0; j|=ADDO;/收数据 j=7;ndat|=j;if(i=1; ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成第12-19次下降沿 _nop_(); _nop_(); ADCS=1;/拉高CS端,AD结束工作if(dat=ndat) return(dat);/校验返回结果/*水分数据显示子程序*/display_water()unsigned int i=0;unsigned c

7、har k;unsigned int v;float f;while(P2=0xf0) /数据处理 k=adc0832(0); f=(k/255.0)*50.0*vrs; /浮点计算,精度更高(v=k/255*5*1000*vrs/100) v=(int) f; /v= k*20;/获得05V的电压值(v=k*1000/255*5),字符类型为int,精度较低 a=v/10000; b=(v%10000)/1000;/除1000取余再除100取整得百位 c=(v%1000)/100;/除100取余再除10取整得十位 d=(v%100)/10;/除10取余个位for(i=1;i5;i+) P1=

8、yingi-1; /P1口控制数码管阴极 switch(i) /P3口输入数码管段码 case 1:P3=yangd+1 ;break; case 2:P3=yangc+1 ;break; case 3:P3=yang_pointb+1 ;break; case 4:P3=yanga+1 ;break; default:break; delay(2);/消除视觉暂 if(i=4) i=0;/*键盘扫描子程序*/scan() scn=0;/有效按键标志置0 if(P2!=0xf0) delay(2); if(P2!=0x0f) /行判断 P2=0x0f;/行置高,列置低 if(!P2_0)/第1

9、行 key=0; else if(!P2_1)/第2行 key=4; else if(!P2_2)/第3行 key=8; else if(!P2_3) /第4行 key=12; /列判断 P2=0xf0; /列置高,行置低 if(!P2_4)/第1列 key+=0; else if(!P2_5) /第2列 key+=1; else if(!P2_6)/第3列 key+=2; else if(!P2_7)/第4列 key+=3; while(P2!=0xf0) P3=0x00;/按键松开后才跳出扫描 P2=0xf0; scn=1;/扫描成功标志位置1 /*系数显示子程序*/display_vrs

10、()unsigned int i;a=vrs/1000;b=(vrs%1000)/100;c=(vrs%100)/10;d=vrs%10;while(P2=0xf0) for(i=1;i=0) & (key=9) )/有效的系数输入键,包括0-9数字键 if(w=1) vrs1=key;w+; /系数十位 else if(w=2) vrs2=key;w+; /系数个位 else if(w=3) vrs3=key;w+; /系数十分为 else if(w=4) vrs4=key;w+; /系数百分位 else vrs=2000;/w=1;/位数超出重新输入 if(key=11) vrs=vrs1

11、*1000+vrs2*100+vrs3*10+vrs4;/ENTER(11号键)确定输入系数,当前使用不储存,放大100倍以节省存储空间 if(key=12) f1=vrs1*1000+vrs2*100+vrs3*10+vrs4;/F1(12号键)储存输入系数到F1,放大100倍以节省存储空间 if(key=13) f2=vrs1*1000+vrs2*100+vrs3*10+vrs4;/F2(12号键)储存输入系数到F2,放大100倍以节省存储空间 if(key=14) f3=vrs1*1000+vrs2*100+vrs3*10+vrs4;/F3(12号键)储存输入系数到F3,放大100倍以节

12、省存储空间 for(i=1;i5;i+) P1=yingi-1; /P1口控制数码管阴极 switch(i) /P3口输入数码管段码 case 1:P3=yangvrs4+1 ;break; case 2:P3=yangvrs3+1 ;break; case 3:P3=yang_pointvrs2+1 ;break; case 4:P3=yangvrs1+1 ;break; default:break; delay(2);/消除视觉暂 if(i=4) i=0; /*主函数*/void main(void) while(1) P2=0xf0; scan();/扫描键盘if(key=10) input();/设INPUT(10号键)为系数修改指令键 if(key=12) vrs=f1; display_vrs();/调用F1作为测量系数if(key=13) vrs=f2; display_vrs();/调用F2作为测量系数if(key=14) vrs=f3; display_vrs();/调用F3作为测量系数if(key=15) display_water();/设15号键START为测量指令键,测量并显示水分

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号