标题:
新人编程求助
[打印本页]
作者:
872938704
时间:
2016-5-14 15:54
标题:
新人编程求助
外部传感器给单片机输入一个高电平后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();
}
}
作者:
ceplayer
时间:
2016-5-14 16:51
你的问题为啥没人回答呢
作者:
quray2016
时间:
2016-5-14 17:50
你写这个程序用的是什么原理呢?
作者:
小楼听雨
时间:
2016-5-14 20:02
你为什写这个程序呢
作者:
ahshmj
时间:
2016-5-14 20:18
如果按你说的就这么些要求,40脚的单片机的IO是够用的。
作者:
872938704
时间:
2016-5-14 21:39
谢谢大家了,小弟现在已经弄通了
作者:
872938704
时间:
2016-5-14 21:40
现在已经弄好了,谢谢大家了!
作者:
872938704
时间:
2016-5-14 21:43
已经弄明白了,非常感谢大家
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1