微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 简单的四键控制51c语言秒表程序

简单的四键控制51c语言秒表程序

时间:10-02 整理:3721RD 点击:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void xian();
void diao();
sbit LS138A=P2^2;                 //定义 138管脚
sbit LS138B=P2^3;                                             
sbit LS138C=P2^4;
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
uint Wela[8],shu1,a,flag;
uchar code   Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //段码控制
void delay(uint i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}
void main()
{   
    P3=0Xff;
    TMOD=0x11;                   //设置定时器0为工作方式1
    TH0=(65536-10000)/256;       //初始化
    TL0=(65536-10000)%256;
     
    while(1)
    {
        uchar j;
        IE=0X82;                     // IE可以寻址   先开了中断
        TR0=1;    //启动定时器
        if(k2==0)
        {
            delay(5);            //按下去 并且去抖
            if(k2==0)
            flag=1;
            while(!k2);
            delay(5);     //松手检测 去抖
            while(!k2);   
        }
        else
        if(k3==0)
            {
                delay(5);
                if(k3==0)
                flag=2;
                while(!k3);      //松手检测 去抖
                delay(5);
                while(!k3);                    
            }
            else
            if(flag==1)
            TR0=0;
            else
            if(flag==2)
                {
                    TR0=1;
                    if(k1==0)
                    TR0=0;
                    else
                    TR0=1;
                }
                else      
                if(k1==0)
                TR0=0;
                else
                TR0=1;
                if(k4==0)
                shu1=0;
                Wela[0]=Disp_Tab[shu1000/1000];
                Wela[1]=Disp_Tab[shu100/100];
                Wela[2]=Disp_Tab[shu10/10]|0x80;              //十位带小数点;
                Wela[3]=Disp_Tab[shu1];
                for(j=0;j<8;j++)
                {
                    P0 = Wela[j];
                    switch(j)
                    {
                        case 0:LS138A=0; LS138B=0; LS138C=0;  break;         
                        case 1:LS138A=1; LS138B=0; LS138C=0;  break;               
                        case 2:LS138A=0; LS138B=1; LS138C=0;  break;
                        case 3:LS138A=1; LS138B=1; LS138C=0;  break;
                          
                    }                                                                           
                    delay(150);
                }               
         
    }   
}
void time0() interrupt 1            //通过定时器不断向while里面送入新shu1的 数值
{   
    TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
    shu1++;
}

呵呵。我是新手

                                                                                 

谢谢lz,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

好东西!谢谢!nice

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

网站地图

Top