哈尔滨理工大学13年度自动化学年设计_第1页
哈尔滨理工大学13年度自动化学年设计_第2页
哈尔滨理工大学13年度自动化学年设计_第3页
哈尔滨理工大学13年度自动化学年设计_第4页
哈尔滨理工大学13年度自动化学年设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/* 四路模拟量信号巡检仪* 学校:哈理工自动化学院* 日期:2013年9月10号-2013年9月26号*功能说明:show1:数码管显示 show2:光柱显示 show3:报警上限值设定 show4:报警下限值设定*/#include #includesbit D1=P10;/3202模式控制端sbit D0=P11;/3202数据输出端sbit CLK=P12;/3202时钟控制端sbit X5045=P13;/5045片选端(低电平有效)sbit CS=P14;/3202片选端(低电平有效)sbit key=P15;/按键检测端sbit A0=P16;/4052通道选择端sbit A1=P17;/4052通道选择端sbit clk1=P24;/光柱阴极锁存端sbit LATCH1=P25;/数码管段锁存sbit clk3=P26;sbit CLK4=P27;/单片机动作信号指示灯/*报警声明*/sbit AL_L=P36;/报警下限控制端sbit AL_H=P37;/报警上限控制端#define DataPort P0/定义数据输出端口#define saomiao P2/定义按键端口#define uchar unsigned char#define uint unsigned intunsigned int code number=2,3, 5, 10,20, 40, 80, 160,320, 625, 1250, 2500,5000;/将12位数据转换成千位数unsigned char code dofly_DuanMa=0xC0, 0xF9, 0xA4, 0xB0,0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83,0xC6, 0xA1, 0x86, 0x8E,0x89,0xBF;/ 显示段码值0f和,h和-unsigned char code dofly_WeiMa=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87;/分别对应相应的数码管点亮,即位码unsigned char code gzdata=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c;/对应点亮相应光柱unsigned char code gzdataj=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/光柱精确显示unsigned int limit_l4;/储存报警值下限unsigned int limit_h4;/储存报警值上限unsigned char TempData8; /存储显示值的全局变量uchar gz3;/储存光柱显示值变量uint dispnum,qiehuan,channel,limit,xkey,dat,top,topj;uchar cos;uchar limith,limitl;/报警延时去抖void show1();void show2();void show3();void show4();uint MCP();void shujuzhuanhuan(uint dat);void fenxi(uint c0);void fenxi1(uint c0);void Display();void delay(unsigned char t);uchar getkey();void jiexikey(uchar xkey);void channel_sel(uchar channel);void jia();void jia1();void jian();void jian1();void alarming();uchar top1();uchar jingque();void dispgz();/* 延时函数,延时多少毫秒*/void delayms(unsigned char t)while(t-) /大致延时1mS delay(245); delay(245);/微延时void delay(unsigned char t) while(-t);/*初始化函数*/void init(void)/初始化配置AL_L=1;AL_H=1;channel = 0;dispnum = 0;limit_h4=(5000,5000,5000,5000);limit_l4=(200,200,200,200);qiehuan=0;channel_sel(channel);/*/void main() init();while(1)xkey=getkey();jiexikey(xkey);if(qiehuan=0)show1();else if(qiehuan=1)show2();else if(qiehuan=2)show3();else if(qiehuan=3)show4();/*数码管显示*/void show1() dispnum=0;channel_sel(channel);if(channel=(-1)channel=3;if(channel=4)channel=0;dat=MCP();shujuzhuanhuan(dat);alarming();fenxi1(dispnum);Display();/*光柱显示*/void show2() dispnum=0;channel_sel(channel);if(channel=(-1)channel=3;if(channel=4)channel=0;dat=MCP();shujuzhuanhuan(dat);alarming();fenxi(dispnum);top=top1();topj=jingque();dispgz();/*上限值设定*/void show3()xkey=getkey();if(channel=(-1)channel=3;if(channel=4)channel=0;jiexikey(xkey);fenxi1(limit_hchannel);Display();/*下限值设定*/void show4()xkey=getkey();if(channel=(-1)channel=3;if(channel=4)channel=0;jiexikey(xkey);fenxi1(limit_lchannel);Display();/*MCP3202数模转换程序*/uint MCP()uint dat=0,i; CS=1; /片选关闭 CLK=0; /clk拉低 CS=0; /片选打开 delay(1); D1=1; /启动转换 delay(1); CLK=1; /第一个脉冲上升沿 delay(1); D1=0; delay(1); CLK=0; /clk拉低 D1=1; /配置1 delay(1); CLK=1; /第二个脉冲 上升沿 delay(1); D1=0; CLK=0; /clk拉低 D1=0; /配置0 :配置1和配置0共同决定选择CH0通道 delay(1); CLK=1; /第三个脉冲上升沿 delay(1); CLK=0; delay(1); CLK=1; /第四个脉冲上升沿 delay(1); CLK=0; D1=1; / delay(1); CLK=1; /第五个脉冲上升沿 delay(1); for(i=0;i12;i+)/读出12位数据 CLK=0; delay(1); dat=dat1|D0; delay(1); CLK=1; delay(1); return dat;/*12位MCP3202数据转换为十进制数字*/void shujuzhuanhuan(uint dat) uchar i,temp;for(i=0;ii) & 0x01;if(temp = 1)dispnum += numberi; /*数据显示转换程序*/void fenxi(uint c0)uint c1,c2,c3,c4,c5,c6; c1=c0/1000; c2=c0-c1*1000; c3=c2/100; c4=c2-c3*100; c5=c4/10; c6=c4-c5*10; gz0=c1;gz1=c3;gz2=c5;/*上四位数据显示下四位显示通道*/void fenxi1(uint c0)uint c1,c2,c3,c4,c5,c6; c1=c0/1000; c2=c0-c1*1000; c3=c2/100; c4=c2-c3*100; c5=c4/10; c6=c4-c5*10; TempData0=dofly_DuanMac1&0x7f; TempData1=dofly_DuanMac3; TempData2=dofly_DuanMac5; TempData3=dofly_DuanMac6; TempData4=dofly_DuanMa12; TempData5=dofly_DuanMa16; TempData6=dofly_DuanMa17; TempData7=dofly_DuanMachannel; /*- 显示函数,用于动态扫描数码管-*/void Display() saomiao=dofly_WeiMa0; /取位码DataPort=TempData0; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; P0 = 0X00; delayms(2);/ 扫描间隙延时,时间太长会闪烁,太短会造成重影 saomiao=dofly_WeiMa1; /取位码 DataPort=TempData1; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; P0 = 0X00; delayms(2);/ 扫描间隙延时,时间太长会闪烁,太短会造成重影 saomiao=dofly_WeiMa2; /取位码 DataPort=TempData2; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; P0 = 0X00; delayms(2);/ 扫描间隙延时,时间太长会闪烁,太短会造成重影 saomiao=dofly_WeiMa3; /取位码 DataPort=TempData3; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; P0 = 0X00; delayms(2);/ 扫描间隙延时,时间太长会闪烁,太短会造成重影 saomiao=dofly_WeiMa4; /取位码 DataPort=TempData4; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; P0 = 0X00; delayms(2);/ 扫描间隙延时,时间太长会闪烁,太短会造成重影 saomiao=dofly_WeiMa5; /取位码 DataPort=TempData5; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; P0 = 0X00; delayms(2);/ 扫描间隙延时,时间太长会闪烁,太短会造成重影saomiao=dofly_WeiMa6; /取位码 DataPort=TempData6; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; P0 = 0X00; delayms(2);/ 扫描间隙延时,时间太长会闪烁,太短会造成重影 saomiao=dofly_WeiMa7; /取位码 DataPort=TempData7; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; P0 = 0X00; delayms(2);/ 扫描间隙延时,时间太长会闪烁,太短会造成重影 /*按键扫描*/uchar getkey()char xkey=0;P0=0xff;clk1=1;clk1=0;LATCH1=1;LATCH1=0;P2=0x00;if(key=1) delay(10);if(key=1)xkey=1;while(key);P2=0x01;if(key=1) delay(10);if(key=1)xkey=2;while(key);P2=0x02;if(key=1) delay(10);if(key=1)xkey=3;while(key);P2=0x03;if(key=1) delay(10);if(key=1)xkey=4;while(key);return xkey;/*分析按键功能*/void jiexikey(uchar xkey) switch(xkey) case 1:channel+;break;case 2:if(qiehuan=2)jia();else if(qiehuan=3)jia1();break;case 3:if(qiehuan=2)jian();else if(qiehuan=3)jian1();break;case 4:qiehuan+;if(qiehuan4) qiehuan= 0;break;default:break; xkey=0;/* CD4502通道选择*/void channel_sel(uchar channel) /CD4502通道选择 if(channel=0)A0 = 0; A1 = 0; / 0Y if(channel=1)A0 = 0; A1 = 1; / 1Y if(channel=2)A0 = 1; A1 = 1; / 2Y if(channel=3)A0 = 1; A1 = 0; / 3Y if(channel=(-1)channel=3;if(channel=4)channel=0;/*上限值加设定*/void jia()limit=limit_hchannel/10; doif(limit500)limit=0;limit_hchannel=limit*10;fenxi1(limit_hchannel);Display(); xkey=0; while(2=xkey);/*下限值加设定*/void jia1()limit=limit_lchannel/10; doif(limit500)limit=0;limit_lchannel=limit*10;fenxi1(limit_lchannel);Display(); xkey=0; while(2=xkey);/*上限值减设定*/void jian() limit=limit_hchannel/10; do if(limit=500) /减操作 if(limit=0)limit=10;limit=limit-10;elselimit=limit-10; if(limit=0)limit=500;limit_hchannel=limit*10;fenxi1(limit_hchannel);Display();xkey=0; while(3=xkey);/*下限值减设定*/void jian1() limit=limit_lchannel/10; do if(limit=500)/减操作 if(limit=0)limit=10;limit=limit-10;elselimit=limit-10; if(limit=limit_hchannel)limith+;limitl=0;if(limith=8)limith=0;AL_H=0;AL_L=1; if(dispnum=8)limitl=0;AL_L=0;AL_H=1; if(dispnumlimit_lchannel+10&dispnum=5) top=10; else if(gz0=4)&(gz1=0) top=9; else if(gz0=3)&(gz1=5) top=8; else if(gz0=3)&(gz1=0) top=7; else if(gz0=2)&(gz1=5) top=6; else if(gz0=2)&(gz1=0) top=5; else if(gz0=1)&(gz1=5) top=4; else if(gz0=1)&(gz1=0) top=3; else if(gz0=0)&(gz1=5) top=2; else if(gz0=0)&(gz1=0) top=1; else if(gz0=0)&(gz1=0) top=0; return top;/*光柱精确显示*/ucha

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论