马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
这个程序只能实现一个检测报警系统的实现,求助如何变成三个乃至更多。代码如下:
#include <reg51.h> //51列单片机头文件 #include <intrins.h> #define uchar unsigned char #define uint unsigned int int t1,i; float t; void anjian(); sbit clock = P3^1; sbit u=P2^3; sbit uge=P2^0; sbit uxiao=P2^1; sbit uxiao2=P2^2; sbit cs=P2^4; sbit adwr=P3^6; //定义AD的WR端口 sbit adrd=P3^7; //定义AD的RD端口 sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit ting=P3^0; uchar a,A1,A2,A3,adval; uchar num1=5,num2,num3; uchar code table0[]={ 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef,0xf7,0xfc, 0xb9,0xde,0xf9,0xf1}; uchar code table1[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } void display(uchar bai,uchar shi,uchar ge) //显示子函数 { P2=0xe0; u=1; P0=0x73; u=0; delayms(5); //延时 uge=1; P0=table0[bai]; uge=0; delayms(5); //延时 uxiao=1; P0=table1[shi]; uxiao=0; delayms(5); //延时 uxiao2=1; P0=table1[ge]; uxiao2=0; delayms(5); //延时 } void display2(uchar b,uchar s,uchar g) //设置显示 { u=1; P0=0xff; u=0; delayms(5); //延时 uge=1; P0=table0; uge=0; delayms(5); //延时 uxiao=1; P0=table1; uxiao=0; delayms(5); //延时 uxiao2=1; P0=table1[g]; uxiao2=0; delayms(5); //延时 } void anjian() //按键设定阈值 { cs=1; if(key1==0) { delayms(20); if(key1==0) { num1++; if(num1==6) num1=0; while(!key1); } } if(key2==0) { delayms(20); if(key2==0) { num2++; if(num2==10) num2=0; while(!key2); } } if(key3==0) { delayms(20); if(key3==0) { num3++; if(num3==10) num3=0; while(!key3); } } } void ADAD() { cs=0; //置CSAD为0,选通ADCS 以后不必再管ADCS while(1) { adwr=1; _nop_(); adwr=0; //启动AD转换 _nop_(); adwr=1; for(a=10;a>0;a--) { display(A1,A2,A3); } if(ting==0) break; while(t > num1*100+num2*10+num3) //过线报警 { clock=0; if(ting==0) { num1=5; num2=0; num3=0; break; } } P1=0xff; //读取P1口之前先给其写全1 adrd=1; //选通ADCS _nop_(); adrd=0; //AD读使能 _nop_(); P1=adval; adval=P1; //AD数据读取赋给P1口 adrd=1; t = adval; t = t/255*500; t1 = t; A1= t1/100; //分出百,十,和个位 A2= (t1%100)/10; A3= (t1%100)%10; } }
void main() // 主程序 { while(1) { ADAD(); while(1) { anjian(); display2(num1,num2,num3); if(ting==1) break; } while(t > num1*100+num2*10+num3) //过线报警 { clock=0; if(ting==0) { num1=5; num2=0; num3=0; break; } } } } |