您当前的位置:五五电子网电子知识单片机-工控设备51单片机数码管秒表C程序 正文
数码管秒表C程序

数码管秒表C程序

点击数:7674 次   录入时间:03-04 11:44:59   整理:http://www.55dianzi.com   51单片机

数码管秒表C程序

*                 数码管显示秒表, 分辨率0.01s                      
*                 K1---控制按钮                           
*                       第一次按下时, 启动开始计时
*                       第二次按下时, 停止         
*                       第三次按下时, 归零  
*  引用资源:数码管数据 p0口,数码管控制p2口  控制按钮 p3.2口
*    秒单位,寄存器与数码管对应关系:                         
*                                            
* --- 秒单位 ---------- 数码管端口 ---- 缓冲区 --------- 计时BCD码值寄存器
*     十万位               P20        dis_buf[7]          sec_bcd[7]
*     万位                 P21        dis_buf[6]          sec_bcd[6] 
*     千位                 P22        dis_buf[5]          sec_bcd[5]
*     百位                 P23        dis_buf[4]          sec_bcd[4] 
*     十位                 P24        dis_buf[3]          sec_bcd[3]  
*     个位(1.s)            P25        dis_buf[2]          sec_bcd[2]  
*     十分位(0.1s)         P26        dis_buf[1]          sec_bcd[1]  
*     百分位(0.01s)        P27        dis_buf[0]          sec_bcd[0]

#include <reg51.h>
#include <intrins.h>

unsigned char data dis_digit;
unsigned char key_s, key_v;

unsigned char code dis_code[11]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表
unsigned char dis_buf[8];        // 显示缓冲区
unsigned char sec_bcd[8];         // 秒计数值, BCD码
unsigned char dis_index;        // 
unsigned char key_times;        // K1 按下次数                //

void clr_time();    
void update_disbuf();
bit    sCAN_key();
void proc_key();
void delayms(unsigned char ms);

sbit    K1 = P3^2;


void main(void)
{
    P0 = 0xff;
    P2 = 0xff;
    TMOD = 0x11;        // 定时器0, 1工作模式1, 16位定时方式
    TH1 = 0xdc;
    TL1 = 0;

    TH0 = 0xFC;
    TL0 = 0x17;
    
    clr_time();            // 
                               
    dis_digit = 0x7f;        // 初始显示P20口数码管
    dis_index = 0;            // 
    
    key_times = 0;
    key_v = 0x01;
    
    IE = 0x8a;                // 使能timer0, timer1中断
    
    TR0 = 1;
    TR1 = 0;
    while(1)
    {
        if(scan_key())
        {
            delayms(10);
            if(scan_key())
            {
                key_v = key_s;
                proc_key();
            }
        }
        
    }
}

void clr_time()
{
    sec_bcd[0] = 0x0;
    sec_bcd[1] = 0x0;
    sec_bcd[2] = 0x0;
    sec_bcd[3] = 0x0;
    sec_bcd[4] = 0x0;
    sec_bcd[5] = 0x0;
    sec_bcd[6] = 0x0;
    sec_bcd[7] = 0x0;   

[1] [2]  下一页


本文关键字:程序  数码管  51单片机单片机-工控设备 - 51单片机