微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这个程序烧到单片机上,数码管总是显示9的,是怎么回事

这个程序烧到单片机上,数码管总是显示9的,是怎么回事

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint num,aa,bb,adval;
uint table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit wr=P3^0;
sbit rd=P3^1;
sbit csad=P3^2;
sbit led=P2^0;
sbit beep=P2^1;
sbit key0=P3^6;
sbit key1=P3^7;
void init();
void start();
void read();
void delay(uint z)
{
        uint t1,y;
        for(t1=z;t1>0;t1--)
          for(y=110;y>0;y--);
}                                         
void main()
{
        init();
        while(1)
        {
                start();
                delay(200);
                read();
                num=adval/12;
                if(num>9) num=9;
                P0=table[num];
                if((num>2)||(num==2))
                TR0=1;
                if(num<2)
                {
                    TR0=0;
                        beep=0;
                        led=1;
                }
                if(key0==0)
                {
                        delay(20);
                        if(key0==0)
                        {
                                TR2=1;
                                while(!key0);
                        }
                       
                }
                if(key1==0)
                {
                delay(20);
                if(key1==0)
                {
                        TR2=0;
                        beep=0;
                        led=1;
                        while(!key1);
                }
                }
        }
}
void init()
{
        csad=0;
        P2=0x01;
        TMOD=0x21;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TL2=(65536-50000)%256;
        ET2=1;
        EA=1;
       
}
void start()
{
        wr=1;
        _nop_();
        wr=0;
        _nop_();
        wr=1;
}
void read()
{
        P1=0xff;
        rd=1;
        _nop_();
        rd=0;
        _nop_();
        adval=P1;
        rd=1;
}
void timer0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
         aa++;
         if(aa==6)
         {
                 aa=0;
                led=~led;
                beep=~beep;
         }
}
void timer2() interrupt 5
{
        TF2=0;
        TH2=(65536-50000)/256;
        TL2=(65536-50000)%256;
        bb++;
        if(bb==10)
        {
                bb=0;
                led=~led;
                beep=~beep;
        }
}       
http://max.book118.com/html/2013/0710/4366852.shtm我是想设计这个

P1=0xff;
adval=P1;
num=adval/12;
if(num>9) num=9;
这样当然一直显示9了,

那要怎样改,才能达到理想的效果!麻烦帮助一下!

那当传感器检测气体的时候的,还会有浓度显示吗?

我试了一下,但是气体传感器检测有浓度的时候,数码管不显示浓度得数值了。请继续为我解答,谢谢

if(num>9) num=9;
这样写没错啊,你是想表达如果浓度大于9或以上,就显示9吧?
if((num>2)||(num==2))
你这样写有意义么?
if(num>=2)不就行了么

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top