找回密码
 立即注册

QQ登录

只需一步,快速开始

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

电位器调节使三位数码管0-100显示,再通过外部按键调定量程?

[复制链接]
跳转到指定楼层
楼主
ID:99007 发表于 2015-12-9 16:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现已实现电位器调节是数码管显示0-100,但是我想通过外部按键触点低电平去定量程,例如:通过外部给一个口低电平来实现条件语句,比如说调节电位器制90时,外部给一个低电平,90就变成100了,然后实现0-90转换为0-100来显示,从而达到调量程的目的。以下是我的程序,红色部分是我加上的条件句,理论上方法好像就是这个样子的,但是貌似行不通!求大神解答!

//拧动电位器,会在数码管的前三位显示0-100之间的数值。这就是把模拟电压转换成数字信号。
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit adrd=P3^7;                          //IO口定义
sbit adwr=P3^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit key=P3^4;

uchar code table[]={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--)
       for(j=110;j>0;j--);
}

void display(uchar bai,uchar shi,uchar ge)         //显示程序
{  
   
           dula=1;
    P0=table[bai];         //显示百位
    dula=0;
    P0=0xff;
           wela=1;
    P0=0x7e;
    wela=0;
    delayms(5);

           dula=1;
           P0=table[shi];         //显示十位   
   dula=0;
   P0=0xff;
           wela=1;
   P0=0x7d;
    wela=0;
    delayms(5);

           dula=1;
           P0=table[ge];         //显示十位   
   dula=0;
   P0=0xff;
           wela=1;
   P0=0x7b;
   wela=0;
  delayms(5);
}


void main()         //        主程序
{

    uchar a,A1,A2,A3,adval,D;
    uint B,C;
    wela=1;
    P0=0x7f;
    wela=0;
    P3=0xff;       //先将P3口都置为高位
    while(1)
  {                      //选通ADCS
    adwr=1;         //AD写入(随便写个什么都行,主要是为了启动AD转换)
            _nop_();
    adwr=0;
            _nop_();
    adwr=1;                            //关闭有AD片选信号锁存器的锁存端以防止在操作数码管时使AD的片选发生变化
        
   for(a=10;a>0;a--)        //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
    {                           //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔                                                                                                                                                                                                                           
                display(A1,A2,A3);
    }        //送去显示各位。

            P1=0xff;                    //读取P1口之前先给其写全1
            wela=1;                   //重新打开有AD片选信号锁存器的锁存端
    _nop_();
    adrd=0;
    _nop_();
    adval=P1;         //AD数据读取赋给P1口
    if(key==0)
   {
        D=adval;
        B=adval*100;
        C=B/D;
        adrd=1;           
        A1=C/100;         //分出百,十,和个位
        A2=C%100/10;
       A3=C%10;
    }
    else
        B=adval*100;
        C=B/255;
        adrd=1;           
        A1=C/100;         //分出百,十,和个位
       A2=C%100/10;
       A3=C%10;
           }
}


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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