找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1716|回复: 7
打印 上一主题 下一主题
收起左侧

新人编程求助

[复制链接]
跳转到指定楼层
楼主
ID:115914 发表于 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();
        }
}       


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:120770 发表于 2016-5-14 16:51 | 只看该作者
你的问题为啥没人回答呢
回复

使用道具 举报

板凳
ID:120791 发表于 2016-5-14 17:50 | 只看该作者
你写这个程序用的是什么原理呢?
回复

使用道具 举报

地板
ID:120814 发表于 2016-5-14 20:02 | 只看该作者
你为什写这个程序呢
回复

使用道具 举报

5#
ID:7485 发表于 2016-5-14 20:18 | 只看该作者
如果按你说的就这么些要求,40脚的单片机的IO是够用的。
回复

使用道具 举报

6#
ID:115914 发表于 2016-5-14 21:39 | 只看该作者
谢谢大家了,小弟现在已经弄通了
回复

使用道具 举报

7#
ID:115914 发表于 2016-5-14 21:40 | 只看该作者
现在已经弄好了,谢谢大家了!
回复

使用道具 举报

8#
ID:115914 发表于 2016-5-14 21:43 | 只看该作者
已经弄明白了,非常感谢大家
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表