中文版 | English

ҷϢ  点击这里给我发消息  点击这里给我发消息  点击这里给我发消息  ҷϢ

新闻中心
信息搜索
关键字:
范 围:
首页新闻中心 数码管开模
 
数码管
新闻来源:深圳市芯斯美电子有限公司    点击数:7298    更新时间:2012/9/11 16:10:38    收藏此页

时钟+温度计的数码管显示


功能:时钟显示,温度显示,可调时间,按键发声。
说明:
1 功能选择键:按下功能选择键,时间停止,秒钟指示灯长灭,选择千位,百位,十位,个位,相对应的每位数码管的小数点亮。
2 “加”:按一下“加”按键,对应的数字会加一。
3 “减”:按一下“减”按键,对应的数字会减一。
4 继续按功能选择键到第五次,退出时间设置,秒钟指示灯闪烁,时钟继续运行。
5 初始化时间为早上6点30分,时间为24小时制。
6 其他功能:添加指示灯。正常运行时,绿色指示灯亮,当进入调整时间时,红色指示灯亮。

#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
 

/****温度 端口定义******/
  sbit wx5=P2^5;
  sbit wx6=P2^6;
  sbit wx7=P2^7;


  sbit DQ=P2^0;


  uint temp, temp1,temp2, xs;


  uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
       0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};



/******延时程序*******/
 void delay1(unsigned int m)
    {
      unsigned int i,j;
    for(i=m;i>0;i--)
   for(j=110;j>0;j--);
    }



 void delay(unsigned int m)
    {
      while(m--);
     }


 void Init_DS18B20()
   {
     unsigned char x=0;
     DQ = 1;          //DQ复位 ds18b20通信端口
     delay(8); //稍做延时
     DQ = 0;          //单片机将DQ拉低
     delay(80); //精确延时 大于 480us
     DQ = 1;          //拉高总线 
     delay(4);
     x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
     delay(20);
    }
/***********ds18b20读一个字节**************/
  uchar ReadOneChar()
   {
     unsigned char i=0;
     unsigned char dat = 0;
     for (i=8;i>0;i--)
     {
      DQ = 0; // 高电平拉成低电平时读周期开始
      dat>>=1;
      DQ = 1; // 给脉冲信号
      if(DQ)
      dat|=0x80;   //
      delay(4);
      }
     return(dat);
   }


 


/*************ds18b20写一个字节****************/
  void WriteOneChar(unsigned char dat)
  {
   unsigned char i=0;
   for (i=8; i>0; i--)
    {
      DQ = 0;          //从高电平拉至低电平时,写周期的开始
      DQ = dat&0x01;   //数据的最低位先写入
      delay(5);        //60us到120us延时
      DQ = 1;      
      dat>>=1;         //从最低位到最高位传入
    }
  }



/**************读取ds18b20当前温度************/
void ReadTemperature()
  {
    unsigned char a=0;
    unsigned  b=0;
    unsigned  t=0;


    Init_DS18B20();
    WriteOneChar(0xCC);   // 跳过读序号列号的操作
    WriteOneChar(0x44);   // 启动温度转换
    delay(10);            // this message is wery important
    Init_DS18B20();
    WriteOneChar(0xCC);   //跳过读序号列号的操作
    WriteOneChar(0xBE);   //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
    delay(10);
    a=ReadOneChar();      //读取温度值低位
    b=ReadOneChar();      //读取温度值高位  
    temp1=b<<4;           //高8位中后三位数的值
    temp1+=(a&0xf0)>>4;   //低8位中的高4位值加上高8位中后三位数的值 temp1室温整数值
    temp2=a&0x0f;         //小数的值
    temp=((b*256+a)>>4);  //当前采集温度值除16得 实际温度值    zhenshu  
    xs=temp2*0.0625*10;   //小数位,若为0.5则算为5来显示  xs小数    xiaoshu
   }


 


//////////////////////////////////////////////////////////////////////////////
/***********温度显示********************/
void wenduxianshi()    //温度显示
   {
     wx5=1;
        P0=table[temp/10];
        delay1(3);
        wx5=0;


        wx6=1;
        P0=table[temp%10];
        delay1(3);
        wx6=0;


        wx7=1;
        P0=table[12];
        delay1(3);
        wx7=0;
 }
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
/****时钟 端口定义******/
  sbit wx1=P2^1;
  sbit wx2=P2^2;
  sbit wx3=P2^3;
  sbit wx4=P2^4;


  uchar  qian,bai,shi,ge,miao1,miao2,count;


  sbit LED1=P3^3;


  ////////////////////////////////////////////
  /***************按键调时程序***************/


   sbit K1=P3^0;
   sbit K2=P3^1;
   sbit K3=P3^2;


   sbit LVSE   =P3^4;  //绿色运行灯
   sbit HONGSE =P3^5;  //红色停止灯
   sbit HUANGSE=P3^6;  //黄色调闹钟灯


   sbit BEEP=P3^7;    //// 定义蜂鸣器口


   uchar K1num,K2num;



 


  //////////////////////////////////////////
    /**********报警声音**************/


   bi(uint t)
   {
      int c,n;
      for(c=0;c      {
      for(n=0;n<50;n++);
      BEEP=~BEEP;      //按位取反BEEP
      }
   return(t);
   }


 



  ///////////////////////////////////////////////
/********定时器初始化*************/


  void init()
    {
      TMOD=0x01; //定义定时器0,工作方式1
      TH0=(65536-50000)/256;   //高8位
      TL0=(65536-50000)%256;   //低8位
      EA=1;     //开全局中断
      ET0=1;  
      TR0=1;    //打开定时器


     }
 /////////////////////////////////////////////// 
/***********定时器中断函数************/
  void timer0() interrupt 1
   {
     TH0=50;
     TL0=50;
     count++;
   if( count==20 ) { count=0; LED1=~LED1;  miao1++;
      
   if( miao1==10 ) { miao1=0;  miao2++; }
   if( miao2== 6 ) { miao2=0;     ge++; }
   if(    ge==10 ) {    ge=0;    shi++; }
   if(   shi== 6 ) {   shi=0;    bai++; }
   if(   bai==10 ) {   bai=0;   qian++; }
   if(  qian== 3 ) {  qian=0;     }
   if(qian==2&&bai==4){qian=0;bai=0;    }
     } }                
  //////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////
/**********时间显示***************/   
   
   void shijianxianshi()    //时间显示
    {
     if( K1num==0 )      //复位
      {
     TR0=1;LVSE=0; HONGSE=1;HUANGSE=1;
     wx1=1;
        P0=table[qian];
        delay1(3);
        wx1=0;


        wx2=1;
        P0=table[bai];
 &

总页数:2  第  1  2    页 

上一篇:LED数码管   下一篇:数码管
【刷新页面】【加入收藏】【打印此文】 【关闭窗口】
 
粤ICP备18084008号
数码管|数码管厂家|二位数码管|三位数码管|四位数码管|数码管开模-芯斯美电子 2005-2010 版权所有 粤ICP备18084008号
邮件:xsm005@126.com 电话:+86 755-29179255 29171966 传真:+86 755-29179206 地址:深圳市宝安区沙井街道向兴路同富裕工业区恒明珠科技工业园3栋