config.h

extern void display();     //LED显示函数
extern void delay(unsigned int i);
extern void read();
extern void displaysj();   //led显示刷新时间
extern void readsj();     //读刷新时间
extern void speak(void);  //蜂鸣器响

typedef unsigned long Ulong;

extern float jishu;               //四字节
extern float jishulv;
extern unsigned int timer_1;    //刷新时间的初值
extern unsigned int t0num;    //用来记录TO计数溢出次数
extern unsigned int shu[6];   //6位数
extern unsigned int shu1[2];
extern unsigned int panduan;    //一个判断值
extern unsigned int panduan1;
extern unsigned int tm,tt;
extern unsigned int uu;
extern unsigned int biaozhi;//用于判断是显示刷新时间还是启动计数,为0表示显示刷新时间,为1表示开始计数,显示计数
extern unsigned int bz;           //外中断0中断产生标志
extern unsigned char code dispcode[];  //字符码显示,共阳极
extern unsigned char code dispcode1[];   //带小数点的字符码显示
extern unsigned char dispbitcode[];      //P2口作为选通口的值 Y0-Y5

main.c

#include "reg52.h"
#include "intrins.h"
#include "config.h"

unsigned int tm,tt;
unsigned int t0num=0;    //用来记录TO计数溢出次数
unsigned int biaozhi=0;//用于判断是显示刷新时间还是启动计数,为0表示显示刷新时间,为1表示开始计数,显示计数
unsigned int bz;           //外中断0中断产生标志
unsigned int uu=0;
unsigned int shu[6]={0,0,0,0,0,0};   //6位数
unsigned int shu1[2]={0,0};
unsigned int panduan=0;    //一个判断值
unsigned int panduan1=0;
float jishu;               //四字节
float jishulv;
unsigned int timer_1=5;    //刷新时间的初值
sbit P12=P1^2;
sbit P13=P1^3;
unsigned int ii=0;
void main(void)
{
 tm=tt=1000;   //初值为5S,由于中断一次是5MS,所以要循环中断1000次
 TMOD=0x15;    //定时器0采用计数(C/T=1),方式1;定时器1采用定时,方式1

SP=0x60;   //设置堆栈的初始地址

TH0=0x00;                                                                                                                                                                                                                                                                                                                                                                                                                          ;
 TL0=0x00;   //定时器0初始化
 TH1=0xee;
 TL1=0x00;     //定时器1初始化  定时5ms
TCON
 IT0=1;    //设置外部中断0为下降沿触发

IE                                                                                    
 IP=0x0d;
 EA=1;    //开总允许位
 EX0=1;    //外部中断0允许位
 ET0=1;    //定时器0中断允许位
 ET1=1;        //定时器1中断允许位
 ET2=1;        //定时器2中断允许位

P3=0x3c;   //设置P3的第二功能 
  
 readsj();      //按一次就更新一次数据                                                                                                                                   
 while(1)    //等待中断产生
 {
   if(biaozhi==0)   //显示刷新时间
   {  
       TR0=TR1=0;
    t0num=TH0=TL0=0;
    TH1=0xee;   //ec,78
    TL1=0x00;
       if(bz==1)     //外中断0产生了
    {
           readsj();      //按一次就更新一次数据
     }
     displaysj();
//     P0=dispcode[10];
     panduan1=0;
   }
   if(biaozhi==1)    //计数
   { 
       TR0=1;   //启动定时器0(TR0)
    TR1=1;         //启动定时器1
    if(uu==1)      //设置的刷新时间到了
    {         
        read();
     uu=0;
     t0num=0;
     TH0=0x00;
     TL0=0x00;
     TH1=0xee;
     TL1=0x00;
     }
     display();
//     P0=dispcode[10];
     panduan=0;
    }
 } 
}

key.c

#include "reg52.h"
#include "intrins.h"
#include "config.h"

sbit P12=P1^2;
sbit P13=P1^3;
 
void int0_int(void) interrupt 0 using 1   //外部中断0

    delay(2);            //延时10MS ,消抖
    if(P13==0)
 {
     biaozhi=0;
     timer_1+=5;
  if(timer_1>30)    //5,15,20,25,30
  {
     timer_1=5;     //刷新时间为0-60S,每次间隔10S
  }
  tm=timer_1*200;   //为了转化为秒
  tt=tm;
  bz=1;     //表明外中断0产生了
  t0num=0;
  TH0=0x00;
  TL0=0x00;
 }
 if(P12==0)
 {
     t0num=0;
  TH0=0x00;                                                                                                                                                                                                                                                                                                                                                                                                                          ;
  TL0=0x00;   //定时器0初始化
     bz=0;
     biaozhi=1;    //表明外中断1产生了
 }
 delay(2);            //延时10MS ,消抖
}

speak.c

#include "reg52.h"
#include "intrins.h"
#include "config.h"

sbit P17=P1^7;

void speak(void)
{
 unsigned char voice;
 unsigned int delay;
 for(voice=0;voice<2;voice++)
 {
  for(delay=0;delay<10000;delay++)
  P17=0;
  for(delay=0;delay<6000;delay++)
  P17=1;
 }
}

time0-int.c

void timer0_int(void) interrupt 1 using 0 //定时器0中断
{
    t0num+=1;
 TH0=0x00;                                                                                                                                                                                                                                                                                                                                                                                                                          ;
 TL0=0x00; 
}

time1-int.c

void timer1_int(void) interrupt 3 using 2  //定时器1中断 中断一次5MS
{
    TH1=0xee;
 TL1=0x00;     //定时器1初始化
 tt--;
 if(tt==0)
 {
    tt=tm;     //重新赋值 
       uu=1;   //返回显示的标志值
 }
}

valuedisplay.c

//计数 数据显示/
#include "reg52.h"
#include "intrins.h"
#include "config.h"
unsigned char code dispcode[]={0x3F,0x06,0x5B,0x4F,
                               0x66,0x6D,0x7D,0x07,
                               0x7F,0x6F,0x00};  //字符码显示,共阴极
unsigned char code dispcode1[]={0xBF,0x86,0xDB,0xCF,0xE6,
                                0xED,0xFD,0x87,0xFF,0xEF};   //带小数点的字符码显示
unsigned char dispbitcode[]={0xDF,0xEF,0xF7,0xFB,
                             0xFD,0xFE};     
                                   //P2口作为选通口的值 Y0-Y5 
void read()     
{
    int i=0;
    int w=10;
    long zhengshu=0;
 jishu=t0num*65536+TH0*256+TL0;  //脉冲个数 
 jishulv=jishu/timer_1;          //将计数转换为计数率
 if(jishulv>=2000)              //超过这个值,蜂鸣器就响
 {
    speak();                      //条件满足,蜂鸣器响
 }
 else
 {
     jishulv=jishulv*10;
  zhengshu=jishulv; 
  for(i=0;i<=5;i++)
  {
      shu[i]=zhengshu%w;      //shu[5]-shu[0]有效位,其中shu[0]实际上是小数位
   zhengshu/=w;
  }
 }
    //取小数点右边一位,这样,shu[5]...shu[1]shu[0]各数就计算出来了,下面需要对数进行处理
}

void display()
{
    int p=0;
 int k=0;
 for(k=6;k>0;k--)       //从高位开始扫描
 {
     if(panduan==0)     //证明高位还没出现非零值
  {     
   if(shu[k-1]==0)     //如果高位等于0
   { 
       if(k==2)
    {
          P0=dispcode1[0]; //是小数点位则正常显示
     }
     else if(k==1)
     {
       P0=dispcode[0];
     }
     else
    {
        P0=dispcode[10];  //则置空
     }  
   }
   else
   {
       panduan=1;      //判断值置1
    if(k==2)
    {
         P0=dispcode1[shu[k-1]];
    }
    else
    {
         P0=dispcode[shu[k-1]];
     }
   }
  }
  else if(panduan==1)     //证明高位已经有非零值
  {       
     if(k==2)
   {
        P0=dispcode1[shu[k-1]];
   }
   else
   {
        P0=dispcode[shu[k-1]];
    }
  }
  P2=dispbitcode[k-1];  //选通
  for(p=600;p>=0;p--);
  P2=0xFF;              //都不选通,先送段码,再送位选通码,再在每次显示
 }        //之后将所有的位都不选通,这样可以消掉拖影
}

delay5ms.c

void delay(unsigned int i)
{
    TR2=1;        //启动定时器2
    while(i!=0)
 { 
  TH2=0xee;   //定时器2计数初值  定时5MS
  TL2=0x00;
  RCAP2H=0x4c;
  RCAP2L=0x00;
  while(TF2!=1);
  TF2=0;
  i--;
 }
 TR2=0;        //停止定时器2
}

refreshtime.c

/读刷新时间/
void readsj()
{
 shu1[1]=timer_1/10;
 shu1[0]=timer_1%10;
}

//刷新时间显示//
void displaysj()
{
    int d=0;
 int m=0;
 for(m=2;m>0;m--)          //从高位开始扫描
 {  
     if(panduan1==0)       //证明高位还没出现非零值
  {     
   if(shu1[m-1]==0)     //如果高位等于0
   { 
       P0=dispcode[10];  //则置空   
   }
   else
   {
       panduan1=1;      //判断值置1
    P0=dispcode[shu1[m-1]];
   }
  }
  else if(panduan1==1)     //证明高位已经有非零值
  {       
   P0=dispcode[shu1[m-1]];
  }
  P2=dispbitcode[m-1];  //选通
  for(d=600;d>=0;d--);
        P2=0xFF;  //都不选通 
 }
}

辐射剂量监测仪(一)相关推荐

  1. 安卓帧数监测软件_土壤墒情监测仪

    土壤墒情监测仪(HM-TS600) 1.技术参数 ★主控制器技术参数 ·数据存储空间:≥100000条 ·记录间隔:1分-24小时可调 ·数据传输:无线传输 ·工作环境:-30℃-80℃ ·供电方式: ...

  2. 【模块】脉搏血氧仪和心率监测仪生物传感器MAX30102

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达.  模块介绍 MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块.它集 ...

  3. arduino读取水位传感器的数据显示在基于i2c的1602a上_XSB-IC-S2智能水位监测仪-老友网...

    XSB-IC-S2智能水位监测仪 多功能本身就是智能仪器仪表的一个特点.例如,为了设计速度较快和结构较复杂的数字系统,仪器生产厂家制造了具有脉冲发生器.频率合成器和任意波形发生器等功能的函数发生器.这 ...

  4. bh1750采集流程图_重大更新:STM32空气监测仪,OneNET物联网平台实时查看(原理图、PCB源文件、程序源码等)...

    更新内容: 一.SD卡记录功能. 自动识别有无SD卡,支持4G以下SD卡. 下图为SD卡记录的数据.以日期为文件名自动创建文件. 记录格式为:时间,PM1.0,PM2.5,PM10,温度,湿度,大气压 ...

  5. ct与x光的哪个辐射大_听说做一次CT所受到的辐射剂量和损害 = 拍400张X光片?

    听说做一次CT所受到的辐射剂量和损害 = 拍400张X光片? 宝宝做了CT对发育到底有没有影响呢? 做一次CT受到的辐射究竟有多大? 这篇文章带你深入了解CT~ CT真的有那么可怕吗? 这么说吧,X光 ...

  6. B002 - 基于嵌入式的老人定位追踪监测仪

    摘要 本项目设计一种可穿戴式的跌倒检测报警系统,通过水平检测模块检测水平信息,采用STC新型单片机进行实时计算.分析,判别是否发生跌倒,若判定为佩戴者跌倒则控制MCU将通过GPS模块实时获取经纬度信息 ...

  7. 树莓派蓝牙ble gattlib c语言,树莓派构建智能家居控制系统 篇三:花花草草智能监测仪接入树莓派Domoticz...

    树莓派构建智能家居控制系统 篇三:花花草草智能监测仪接入树莓派Domoticz 2017-05-22 19:30:08 35点赞 410收藏 31评论 作为工科男,实在对花花草草没太多感觉.家里阳台养 ...

  8. 井盖智能监测终端——井盖状态监测仪

    一.产品概述 井盖智能监测终端是一款用于监测城市窨井井盖状态的设备,安装于井盖背面,当井盖发生异动或窨井液位达到报警条件时,将触发井盖监测仪报警,将井盖状态.经纬度.设备参数等数据通过无线传输方式发送 ...

  9. 基于51单片机的压力监测仪(MPX4115)(Proteus仿真+程序)

    编号:28 基于51单片机的压力监测仪(MPX4115) 功能描述: 本设计由51单片机最小系统+MPX4115压力传感器+ADC0832模块+液晶1602模块 1.主控制器是AT89C82单片机 2 ...

最新文章

  1. python selenium加载插件
  2. Linux安装prometheus+grafana监控
  3. 力扣题目——29. 两数相除
  4. Python遗传算法初学者教程
  5. 企业网站制作中CMS系统的作用及现状
  6. 利用电脑玩android版天天连萌刷高分 二,利用计算机玩Android版“天天连萌”刷高分(二)——图像识别...
  7. C语言经典题目:求阶乘n!=n*(n-1)*...*1,阶乘和s=1!+(2)!+(3)!+...+n!
  8. 用matlabd批量处理图片
  9. 极简风格的演讲型幻灯片设计
  10. 城市槽音乐在津巴布韦的美国音乐如何影响其他文化和身份的个案研究
  11. cloudflare速度怎么样_使用CloudFlare一周的数据与体验
  12. GMOS6803为7频段高精度RTK系统应用桥梁监测
  13. 寻找志同道合者共同成立写作小组
  14. left join 用法
  15. 微信功能版(可用于电脑、安卓手机端)微信电脑版 使用说明
  16. 基于ssm保险理财系统
  17. Ardunio开发实例-LIS3MDL磁场传感器
  18. 行人重识别0-08:DG-Net(ReID)-代码无死角解读(4)-网络Es编码解码过程
  19. R data.table系统学习
  20. Android Behavior之相关解析

热门文章

  1. 敏捷思维:要么双赢,要么别干
  2. 【实践与问题解决29】苹果系统如何做脚本控制手机自动手势
  3. 【bzoj 1616】: [Usaco2008 Mar]Cow Travelling游荡的奶牛 dp
  4. FPGA设计进阶1--XilineFPGA结构(UltraScale)
  5. 基于struts+spring+ibatis的轻量级J2EE开发
  6. 设置ListView中的所有Item均不可点击
  7. 如何让淘宝店铺排名更靠前 淘宝搜索排名技巧分享
  8. 关于兼容北斗版本808协议中位置信息汇报0x0200的解析
  9. 日历签到html,简单的手机移动端日历签到js代码
  10. 十行代码帮你迅速回应大家的祝福,你可以安心抢红包了~