单片机/MCUwilliam hill官网
直播中

丁一凡

11年用户 114经验值
擅长:嵌入式技术
私信 关注
[文章]

模拟电子称

#include                                 //包含头文件
***it buz=P1^4;
//***it led=P2^0;
#define shuma P0                                        //定义数码管数据口
***it LED_0=P1^0;                                        //定义数码管4条控制线
***it LED_1=P1^1;
***it LED_2=P1^2;
***it LED_3=P1^3;
***it teep=P3^4;
***it add=P2^0;                                                //加按键定义
***it dec=P2^1;
***it k1=P2^2;
***it k2=P2^3;                                                //减按键定义
unsigned char m;                                        //中断显示控制位
unsigned int d,k,e,i,f,n;

void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4);
/*=====0-9=====A-G=====*/
unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
             0x80,0x90,0x88,0x83,0xc6,0x86,0x8e,0x82};
                                                                         //共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E F

//定时初值计算方法:以5ms为例,5ms=5000us,0xffff-5000/1.085即为TH和TL的值
void int1() interrupt 3                         //T1中断,时间是5ms
{
        unsigned char d1,d2,d3,d4;
//        TR1=0;                                                         //关中断
        TH1=0xed;                                                 //装定时器初值实现5ms定时
        TL1=0xff;
//        ET1=1;                                                         //开中断
//        TR1=1;
        d2=d%10;                                                //把数字d的千、百、十、个位拆开显示
        d1=(d/10)%10;
        d4=e%10;                                                //把数字d的千、百、十、个位拆开显示
        d3=(e/10)%10;
        display(d1,d2,d3,d4);
       
}

void main( void )
{       
        d=0,k=0;
       
        //unsigned int i;
        m=1;
        TMOD=0x10;                                                 //设置为T1定时器
        TH1=0xed;                                                 //装定时器初值
        TL1=0xff;
        TR1=1;                                                         //开中断
        ET1=1;
        EA=1;
        while(1)
        {               
                if(add==0 ||dec==0 )                //如果两个按键其中一个被按下
                {
                        P2=P3;                                        //LED指示
                        i=10000;                                //延时去抖动
                        while(i--);
                        if(add==0)                                //如果是按下加键,则d加1
                                d++;
                        if(dec==0)                                //如果是按下减键,则d减1
                                d--;
                        e=d*k;
                }
                if(k1==0||k2==0)
                {
                        P2=P3;                                        //LED指示
                        i=10000;                                //延时去抖动
                        while(i--);
                        if(k1==0)                                //如果是按下加键,则d加1
                                k++;
                        if(k2==0)                                //如果是按下减键,则d减1
                                k--;
                        e=d*k;
                        for        (n=0;n                         {
                        teep=0;
                        for(f=0;f<30000;f++);
                        teep=1;
                        for(f=0;f<30000;f++);
                        }
               
                }
        }
}





void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4)
{
        if(m==1)
        {
                LED_0=0;                                                //使能该数码管控制位
                LED_1=LED_2=LED_3=1;                        //其他控制位无效
                shuma=a[d1];                                        //按照数据点亮该数码管
        }
        if(m==2)
        {
                LED_1=0;
                LED_0=LED_2=LED_3=1;
                shuma=a[d2];
        }
        if(m==3)
        {
                LED_2=0;
                LED_1=LED_0=LED_3=1;
                shuma=a[d3];
        }
        if(m==4)
        {
                LED_3=0;
                LED_1=LED_2=LED_0=1;
                shuma=a[d4];
        }
        m++;                                                                //数码管位循环扫描
        if(m>=5)
                m=1;
}



回帖(3)

李仲元

2013-2-2 21:48:31
举报

h1654155960.8359

2017-3-12 18:24:49
不错的文件,值得收藏
举报

lzhiaohiua

2018-6-21 09:00:39
谢谢楼主的分享学习了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分