⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lumin555.c

📁 压缩包中包括多个常用的汇编
💻 C
字号:
/****************************************************************************/
/*                                                                          */
/*                Copyright (c) 2005, 老树工作室                            */
/*                     All rights reserved.                                 */
/*                                                                          */
/*      Email:laoshu0902@163.com                                            */
/*      www.laoshu0902.bokee.com                                            */
/*                                                                          */
/****************************************************************************/
/****************************************************************************/
/* 文件名:lumin555.c                                                       */
/* 版  本:Version 1.0                                                      */
/* 描  述:利用光敏电阻与tlc555检测光强的代码                               */
/*                                                                          */
/* 作  者:spot                                                             */
/* 函  数:                                                                 */
/*         time0_over_int                                                   */
/*         ext1_int_proc                                                    */
/*         system_init                                                      */
/*         get_lumin                                                        */
/*                                                                          */
/* 历史记录:                                                               */
/*  spot          2005-06-25     Creat Inital version. (Version 1.0)        */
/****************************************************************************/

#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include "../includes/types.h"

/* 函数声明 */
void time0_over_int(void); /* 定时器0中断服务程序 ,使用第1组寄存器  */
void ext1_int_proc(void);  /* 外部中断1中断服务程序,使用第2组寄存器 */
void system_init(void);    /* 系统上电初始化 */
u_char get_lumin(u_int fhz);/* 计算当前光强  */
extern void load_number(u_char number, bit dp);
extern void send_latch_clock(void);
extern void clear_led(void);
/* 声明结束 */

u_int fhz_tlc555;    /* tlc555输出频率 */
u_char timer_count;  /* 定时计数       */
bit timer_int;       /* 定时标志       */

/* 定时器0中断服务程序 ,使用第1组寄存器 */
void time0_over_int(void) interrupt 1 using 1
{
    TF0=0;
    timer_int=1;
    TH0 = -(46080 / 256);
    TL0 = -(46080 % 256);
}

/* 外部中断1中断服务程序,使用第2组寄存器 */
void ext1_int_proc(void) interrupt 2 using 2
{
    fhz_tlc555++;
}

/* 系统上电初始化 */
void system_init(void)
{
    EA = 0;
    timer_int = 0;
    timer_count = 0;

    TMOD = 0x01;           /*定时器0工作于方式1*/
    TCON = 0x04;           /*外部中断下降沿触发*/
    TH0 = -(46080 / 256);  /*定时50毫秒*/
    TL0 = -(46080 % 256);
    PT0 = 1;               /*定时器0高优先级*/
    TR0 = 1;               /*定时器0启动计数*/
    IE = 0x86;             /*定时器0,外部中断1,CPU开中断*/
}

/* 计算当前光强 */
u_char get_lumin(u_int fhz)
{
    u_char lumin = 0;

    if (fhz <= 2000)/* 光强为0 */
    {
        return 0;
    }
    else if ( (fhz > 2000) && (fhz <= 4770) )/* 光强为0~10 */
    {
        lumin = fhz / 277 - 7.2;
        return lumin;
    }
    else if ( (fhz > 4770) && (fhz <= 5400) )/* 光强为10~20 */
    {
        lumin = fhz / 63 - 65.7;
        return lumin;
    }
    else if ( (fhz > 5400) && (fhz <= 8200) )/* 光强为20~30 */
    {
        lumin = fhz / 280 + 0.7;
        return lumin;
    }
    else if ( (fhz > 8200) && (fhz <= 9600) )/* 光强为30~40 */
    {
        lumin = fhz / 140 - 28.6;
        return lumin;
    }
    else if ( (fhz > 9600) && (fhz <= 10100) )/* 光强为40~50 */
    {
        lumin = fhz / 50 - 152;
        return lumin;
    }
    else if ( (fhz > 10100) && (fhz <= 12100) )/* 光强为50~60 */
    {
        lumin = fhz / 200;
        return lumin;
    }
    else if ( (fhz > 12100) && (fhz <= 12900) )/* 光强为60~100 */
    {
        lumin = fhz / 20 - 546;
        return lumin;
    }
    else if (fhz > 12900)
    {
        lumin = 99;
        return lumin;
    }
}

/* 在数码管上显示当前光强 */
void display_lumin(u_int current_lumin)
{
    load_number( (current_lumin %10), 0);
    load_number( (current_lumin /10), 0);
    send_latch_clock();
}

main()
{
    u_char cur_lumin;

    system_init();
    clear_led();
    while(1)
    {
        if (timer_int == 1) /* 50毫秒定时到 */
        {
            timer_int = 0;
            timer_count++;

            if (timer_count == 100)  /* 5秒定时到 */
            {
               timer_count = 0;
               fhz_tlc555 /= 5;
               cur_lumin = get_lumin(fhz_tlc555);
               clear_led();
               display_lumin(cur_lumin);
               fhz_tlc555 = 0;
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -