久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 新人求教 做了一個顯示時間和溫度并且報警系統,但是程序有問題,求教 [打印本頁]

作者: 浮生未歇    時間: 2014-6-8 12:34
標題: 新人求教 做了一個顯示時間和溫度并且報警系統,但是程序有問題,求教
做了一個51的顯示時間和實時溫度并且附帶報警系統。但是仿真的時候只有一開始能顯示溫度,然后改變時間和溫度都無法實現,并且報警系統無法實現,求教大神。 壓縮包里附帶了程序和仿真圖。
作者: 浮生未歇    時間: 2014-6-8 12:35
仿真圖和C程序

Desktop.zip

21.68 KB, 下載次數: 39

仿真圖+程序


作者: 浮生未歇    時間: 2014-6-8 12:49
/*
功能:溫度采集顯示和可調時鐘顯示,蜂鳴器報警,時鐘用中斷法實現
s1:選擇要調節的時、分、秒位
s2:時、分、秒加一
s3:時、分、秒減一
*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,s1num,count;
uchar shi,fen,miao;
sbit rs=P2^0;
sbit e=P2^1;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2; //按鍵定義
sbit DQ =P2^2; //定義通信端口
sbit beep=P1^0;
bit flag;
uchar code table1[]="Time: 00:00:00";
uchar code table2[]="Temperature: 'C";//1602初始化字符
void  alarm(uchar num);
void delay(uint z)//延時子函數
{
uint x,y;
for(x=z; x>0; x--)
   for(y=110;y>0;y--);
}
#include<1602.h>
#include<18b20.h>
#include<clock_set.h>
void main()
{
uchar temp;
init_1602();
while(1)
{ delay(500); //去除0秒和1秒之間顯示間隔跟正常1秒間隔相差過大
   if(miao==0)   //每分鐘進行溫度采集一次
   {
    TR0=0;   //進入溫度采集后,關閉定時器
    flag=1;   //flag=1,標志進入溫度采集模式
    write_com(0x80+0x40+13);
    write_dat(0x30+1);     //消除不顯示數字1
    temp=ReadTemperature();    //讀取DS18B20的溫度值
        alarm(temp);
    write_1602(12,temp);   //向1602中寫入溫度值
    TR0=1; //溫度采集完成后,打開定時器
    delay(100);//等待miao不等零,跳出循環
   }
   flag=0; //flag=0,標志在時鐘顯示模式下
   keyscan(); //調用鍵盤掃描子程序,用以調整時間
}
}

void timer0() interrupt 1//定時器1的中斷服務程序,并向1602中寫時分秒顯示時間
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
count++;
if (count==18)
{
   count=0;
   miao++;
   if(miao==60)
   {
    miao=0;
    fen++;
    if(fen==60)
    {
     fen=0;
     shi++;
     if(shi==24)
     {
      shi=0;
     }
     if(flag==0) //flag=0,標志在時鐘顯示模式下,然后才顯示時間
     write_1602(6,shi);
    }
    if(flag==0)
    write_1602(9,fen);
   }
   if(flag==0)
   write_1602(12,miao);
}
}

void  alarm(uchar num)                                                  //報警
{
  if(40>=num)
     beep=1;                                                  //在溫度允許范圍,不報警         
  else
         beep=~beep;
  return(0);
}



作者: 浮生未歇    時間: 2014-6-8 12:50
1602.h
void write_com(uchar com)//向1602液晶寫命令函數
{
rs=0;
e=0;
P0=com;
delay(5);
e=1;
delay(5);
e=0;
}
void write_dat(uchar dat)//向1602液晶寫入數據
{
rs=1;
e=0;
P0=dat;
delay(5);
e=1;
delay(5);
e=0;
}
void init_1602()//1602液晶的初始化
{
uchar i;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
write_com(0x80); //第一行字符的初始化
for(i=0;i<16;i++)
{
   write_dat(table2[i]);
   delay(5);
}
write_com(0x80+0x40); //第二行字符的初始化
for(i=0;i<14;i++)
   {
    write_dat(table1[i]);
    delay(5);
   }
}
void write_1602(uchar address,uchar temp_dat)//向指定的地址中寫入時、分、秒數據
{
uchar gewei,shiwei;
if(flag==0)     //若在時鐘顯示模式下,向第二行寫數據
{
   write_com(0x80+0x40+address);
}
   else
   {
    write_com(0x80+address); //若在溫度采集顯示模式下,向第一行寫數據
   }
shiwei=temp_dat/10;
gewei=temp_dat%10;
write_dat(0x30+shiwei);   //根據1602字符庫做相應轉換
write_dat(0x30+gewei);
}
作者: 浮生未歇    時間: 2014-6-8 12:50
18b20.h
void delay_18b20( int i)//延時子函數
{
     while(i--);
}
//初始化DS18B20子函數
Init_DS18B20(void)
{
unsigned char x=0 ;
DQ = 1;    //DQ復位
delay_18b20(8); //稍做延時
DQ = 0;    //單片機將DQ拉低
delay_18b20(80); //精確延時 大于 480us
DQ = 1;    //拉高總線
delay_18b20(14);
x=DQ;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
delay_18b20(20);
}
//讀一個字節
ReadOneChar(void)
{
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_18b20(4);
}
return(dat);
}
//寫一個字節
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
   DQ = 0;
   DQ = dat&0x01;
   delay_18b20(5);
   DQ = 1;
   dat>>=1;
}
delay_18b20(4);
}
//讀取溫度值
ReadTemperature(void)
{
uchar a,b,t;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
delay(850);   //等待溫度轉換結束,不能過短,否則第一次顯示不出實際溫度,會顯示85
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=ReadOneChar();   //讀取溫度值低位
b=ReadOneChar();   //讀取溫度值高位
a=a>>4;            //低位右移4位,舍棄小數部分
t=b<<4;            //高位左移4位,舍棄符號位
t=t|a;            
return(t);
}
作者: 浮生未歇    時間: 2014-6-8 12:51
clock_set.h
void keyscan()//鍵盤掃描程序
{
if(s1==0)//s1鍵掃描
{
   delay(5);
   if(s1==0)
   {
    TR0=0;
    s1num++;
    while(!s1);//等待鍵的釋放
    switch(s1num)//根據s1的按鍵次數做相應的處理
    {
     case 1:
      write_com(0x80+0x40+12);
      write_com(0x0f); break;//按鍵一次,調整光標的形狀及位置
     case 2:
      write_com(0x80+0x40+9); break;
     case 3:
      write_com(0x80+0x40+6); break;
     case 4:
      s1num=0;
      write_com(0x0c);
      TR0=1;break;
    }
   }
}
if(s1num)//在s1有被按下的情況下做相應的處理
{
   if(s2==0)//s2按鍵檢測,按下s2鍵后相應的時、分、秒加1操作
   {
    delay(5);
    if(s2==0)
    {
    while(!s2);//松手檢測
     switch(s1num)
     {
      case 1:miao++;
         if(miao==60) miao=0;
         write_1602(12,miao);
         write_com(0x80+0x40+12);break;
      case 2:fen++;
         if(fen==60) fen=0;
         write_1602(9,fen);
         write_com(0x80+0x40+9);break;
      case 3:shi++;
         if(shi==24) shi=0;
         write_1602(6,shi);
         write_com(0x80+0x40+6);break;
      case 4:break;
     }
//     delay(500);//把松手檢測部分去除后,按下后時間一直增加
    }
   }
   if(s3==0)//s3按鍵檢測,按下s3鍵后相應的時、分、秒減1操作
   {
    delay(5);
    if(s3==0)
    {
     while(!s3);//松手檢測
     switch(s1num)
     {
     case 1:miao--;
        if(miao==-1) miao=59;
        write_1602(12,miao);
        write_com(0x80+0x40+12);break;
     case 2:fen--;
        if(fen==-1) fen=59;
        write_1602(9,fen);
        write_com(0x80+0x40+9);break;
     case 3:shi--;
        if(shi==-1) shi=23;
        write_1602(6,shi);
        write_com(0x80+0x40+6);break;
     case 4:break;
     }
    // delay(500);//把松手檢測部分去除后,按下后時間一直減小
    }
   }
}
}

作者: 胡德立22    時間: 2014-6-17 19:26
真的蠻好的哦
作者: 1678    時間: 2015-8-7 17:54
你用什么顯示  啊
作者: helloccz    時間: 2015-8-12 10:35
1678 發表于 2015-8-7 17:54
你用什么顯示  啊

他用的是1602顯示的,在開頭已經說明




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91麻豆精品国产91久久久更新资源速度超快 | 国产视频久久 | 天堂av中文在线 | 欧美成人精品一区二区三区 | 九九亚洲 | 欧美一级片在线看 | 中文无吗| 精品一区久久 | 97视频在线观看网站 | 国产精品国产自产拍高清 | 日日夜夜操天天干 | 日韩高清中文字幕 | 日韩欧美国产精品一区 | 99成人免费视频 | 91久久精品国产免费一区 | 欧美一级二级三级视频 | 成人网在线观看 | 在线视频日韩 | 成年人在线观看 | 亚洲一区二区av在线 | 一区在线观看 | 国产精品一区二区视频 | 精品视频在线观看 | a免费视频| 夜夜操天天操 | 欧美日韩在线一区二区 | 亚洲国产精品精华素 | 亚洲精品一二区 | www一级片 | 做a视频 | 亚洲午夜av久久乱码 | 日本福利在线 | 成人av免费 | 久久久免费电影 | 美女艹b | 欧美日韩综合一区 | 国产1区2区3区 | 国产线视频精品免费观看视频 | 欧美日韩国产免费 | 天天干狠狠操 | 国产免费色 |