外部传感器给单片机输入一个高电平后LED计数,然后单片机给一I/O口输出6S的高电平,那么怎么在LED上计数,还能动态扫描吗?现在只能显示个位。
附上程序
求帮忙1
#include<reg52.h> //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
uchar duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //所需的段的位码
uchar wei[4]={0Xfe,0Xfd,0Xfb,0Xf7}; //位的控制端
uint z,x,c,v, date; //定义数据类型
uint dispcount=0;
/********************************************************************
I/O定义
*********************************************************************/
sbit LED=P1^0; //定义单片机P1口的第1位 (即P1.0)为指示端
sbit DOUT=P3^2; //定义单片机P2口的第1位 (即P2.0)为传感器的输入端
sbit dula=P2^6;
sbit wela=P2^7;
sbit OUT=P1^7;
/********************************************************************
延时函数
*********************************************************************/
void delayms(uint xms)//延时程序
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void delay6s(void){
uchar h,i,j,k;
for(h=28;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
/**********************************************************************
数码管动态扫描
*********************************************************************/
void xianshi()
{
/*****************数据转换*****************************/
z=date/1000; //求千位
x=date%1000/100; //求百位
c=date%100/10; //求十位
v=date%10; //求个位
dula=1;
P0=duan[z];
dula=0;
P0=0xff;
wela=1;
P0=wei[0];
wela=0;
delayms(1);
dula=1;
P0=duan[x];
dula=0;
P0=0xff;
wela=1;
P0=wei[1];
wela=0;
delayms(1);
dula=1;
P0=duan[c];
dula=0;
P0=0xff;
wela=1;
P0=wei[2];
wela=0;
delayms(1);
dula=1;
P0=duan[v];
dula=0;
P0=0xff;
wela=1;
P0=wei[3];
wela=0;
delayms(1);}
/*******************************************************************
中断
*********************************************************************/
void ExtInt0() interrupt 0 //中断服务程序
{
dispcount++; //每按一次中断按键,计数加一
if (dispcount==9999) //计数范围0-9999
{dispcount=0;}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{ TCON=0x01; //中断设置
IE=0x81;
while(1) //无限循环
{
LED=1; //熄灭P1.0口灯
OUT=0;
if(DOUT==1)//当浓度高于设定值时 ,执行条件函数
{
delayms(1);//延时抗干扰
if(DOUT==1)//确定 浓度高于设定值时 ,执行条件函数
{
LED=0; //点亮P1.0口灯
OUT=1;
delay6s();
}
}
date=dispcount;
xianshi();
}
}
|