在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2656|回复: 2

[求助] 怎么修改该程序

[复制链接]
发表于 2018-3-24 21:24:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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;

}

}

}

}

发表于 2018-3-25 14:18:15 | 显示全部楼层
谢谢分享
发表于 2018-3-27 21:31:07 | 显示全部楼层
我是来占积分的,呵呵!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-18 13:45 , Processed in 0.019235 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表