|
void mian()
{
init; //LCD初始化
clear_scree(0);//清屏
show_hz()
alam_bit=1;
while(1)
{
show14X16(1,4,0,wen); //溫
show14X16(1,4,15,du) ; //度
show_float(2,2,12,Alarm[0]);
show_float(2,2,12,Alarm[1]);
show_float(2,2,12,Alarm[2]);
show_float(2,2,12,Alarm[3]);
my_alarm();
my_plus()
Temp_value[0]=readyreadtemp(0)
my_delaynms(10)
if((temp_value[0]>0)&&(temp_value[0]<128))
show_digit(1,2,44,temp_value[0]); //測量值;
my_delaynms(1);
Temp_value[1]=readyreadtemp(1);
my_delaynms(10);
if((temp_value[0]>0)&&(temp_value[0]<128))
show_digit(1,4,44,temp_value[1]); //測量值;
my_delaynms(1);
ADC_Value=A_D()
ADC_float=((float)(ADC_Value*(Max-Min)))/225.0+Min
show_float(1,6,38,a\ADC_float);
EA
}
}
#include<reg52.h>
#define uint unsigned int
sbit X15=P3^5
sbit X16=P3^6
sbit X17=P3^7
unsigned char A_D()
{
unsigned char i,dat;
X15=1; //一個轉換周期開始
X16=0 ;//為第一個脈沖作準備
X15=0 ;//X15置0,片選有效
X17=1 ;//X17置1,規定的起始信號
X16=1 ;//第一個脈沖
X16=0 ;//第一個脈沖的下降沿,此前X17必須是高電平
X17=1 ;// X17置1,通道選擇信號
X16=1 ;// 第二個脈沖,第二、三個脈沖下沉之前,DI必須跟別輸入兩位數據用于選擇通道,這里選通道CH0
X16=0 ;//第二個脈沖下降沿
X17=0 ;//DI置0,選擇通道0
X16=1 ;//第三個脈沖
X16=0 ;//第三個脈沖下降沿
X17=1 ;//第三個脈沖下沉之后,輸入端X17失去作用,應置1
X16=1 ;//第四個脈沖
for(i=0;i<8;i++) //高位在前
{
X16=1; //第四個脈沖
X16=0;
dat<< =1; //將下面儲存的低位數據向右移
dat|=(unsigned char)X17; //將輸出數據X17通過或運算儲存在dat最低位
}
X15=1, //片選無效
return dat; //將讀出的數據返回
}
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#include,<reg52h>
#ifndef_DS18B20_h
#define_DS18B20_h
Unsigned char readyreadtemp(bit flag)
Void delay_us(int n)
Bit init_DS18B20(bit flag)
Sbit X10=P3^0
Sbit X11=P3^1
Void delay_us(int n)
{
Whle(t--)
}
Void init_DS18B20(bit flag)
{
Uchar n
If(flag)
{
X10=1
Delay(8)
X10=0
Delay(80)
X10=1
Delay(8)
N=X10
Delay(4)
}
Else
{
X11=1
Delay(8)
X11=0
Delay(80)
X11=1
Delay(8)
X11=0
Delay(4)
}
}
Void wrote_byte(bit flag,uchar dat)
{
Uchar i
If(flag)
{
X10=1
_nop_()
Fol(i=0;i<8;i++)
{
X10=0
X10=dat&0x01
Delay(4)
X10=1
Dat>>=1
}
}
Else
{
X11=1
_ nop_()
Fol(i=0;i<8;i++)
{
X11=0
X11=dat&0x01
Delay(4)
X11=1
Dat>>=1
}
}
Delay(4)
}
Uchar read_byte(bit flag)
{
Uchar i,value
If(flag)
{
X10=1
_nop_()
Fol(i=0;i<8;i++)
{
X10=0
Value>>=1
X10=1
_nop_()
If(X10)
Value|=0x80
Delay(4)
}
}
Else
{
X10=1
_nop_()
Fol(i=0;i<8;i++)
{
X11=0
Value>>=1
X11=1
_nop_()
If(X11)
Value|=0x80
Delay(4)
}
}
Return value
}
uchar readyreadtemp(bit flag)
{
Uchar a,b
Uchar temp=0
Init_DS18B20(flag)
Write_byte(flag,0xcc)
Write_byte(flag,0x44)
Init_DS18B20(flag)
Wrte_byte(flte,0xcc)
Wrte_byte(flte,0xbe)
A=read_byte(flag)
B=read_byte(flag)
B<<=4
B+=(a&0xf0)>>4
Temp=b
Return temp
}
#include<reg52.h>
#include<intrins.h>
#include <string.h >
#include <stdio.h>
#include “DS18B20.h”
#include “font.h”
#define uchar unsigned char
#define uint unsigned int
#define max 15.0
#define min 0.0
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
#include<string.h>
#include”my_char.h”
#define uchar unsigned char
#define uint unsigned int
Extern void init()
Extern void show 16X16(uchar screen,uchar page,uchar columm,uchar p[])
Extern void show 14X16(uchar screen,uchar page,uchar columm,uchar p[])
Extern void show 6X16(uchar screen,uchar page,uchar columm,uchar my_dat)
Extern uchar show_digit(uchar screen,uchar page,uchar columm,float num)
Extern void clear_screen(uchar screen)
Extern void set_line(uchar line)
Extern uchar show_freq(uchar screen,uchar page,uchar columm,float num)
Extern void show_float(uchar screen,uchar page,uchar columm,float num)
Extern unsigned charA_D(void)
Sbit X21=P2^0
Sbit X22=P2^1
Sbit X23=P2^2
Sbit X24=P2^3
Sbit X25=P2^4
Const unsigned char code zhi[]
{
0x20,0x10,0xFC,0x03,0x04,0xF4,0x54,0x54,0x5F,0x54,0x54,0xF4,0x04,0x00,0x00,0x00,0x3F,0x00,0x20,0x3F,0x25,0x25,0x25,0x25,0x3F,0x20,0x00
}
Const unsigned char code ce[]=
{
0x10,0x11,0x84,0x00,0xFE,0x02,0xFA,0x02,0xFE,0x00,0xF8,0x00,0xFF,0x00,0x18,0x06,0x01,0x20,0x11,0x0C,0x03,0x04,0x19,0x00,0x23,0x20,0x3F,0x00
}
Const unsigned char code liang[]=
{
0x20,0x20,0xEF,0xA9,0xA9,0x,0xAB,0xED,0xA9,0xA9,0xA9,0xEF,0x20,0x20,0x00,0x20,0x28,0x2B,0x2A,0x2A,0x2A,0x3F,0x2A,0x2A,0x2A,0x2B,0x28,0x20,0x00
}
Const unsigned char code my_char[][16]
{
{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00}
{0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00}
{0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00}
{0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00}
{0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00}
{0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00}
{0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00}
{0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00}
{0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00}
{0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00}
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00}
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
}
Uchar temp_value[2]
Void my_delaynms(uint n)
{
Uint i=0,j=0
For(i=0;i<100;i++)
For(j=0;j<n;j++)
}
Void show_hz(void)
{
Set_line(0)
Show14X16(1,0,21,ce)
Show14X16(1,0,35,liang)
Show14X16(1,0,49,zhi)
Show14X16(2,0,10,she)
Show14X16(2,0,24,ding)
Show14X16(2,0,38,zhi)
Show14X16(1,2,0,wen)
Show14X16(1,2,15,du)
Show14X16(1,6,0,ya)
Show14X16(1,6,15,li)
Show6X16(1,2,31,`1`)
Show6X16(1,4,31,`2`)
}
Int count=0,timecount=0,s_count
Bit time_flag=0
Uint ADC_value=0
Float ADC_float
Float alarm[4]={70.0,70.0,0.4,10.0}
Sbit lalrm_bit=P3^3
Sbit stop_bit=P3^4
Void my_alaem(void)
{
If((temp_value[0]>alarm[0])||(ADC_Float>Alarm[3]))
{
Lalrm_bit=0
Stop_bit=1
}
Else
Alarm_bit=1
If(ADC_Float<Alarm[2])
Stop_bit=0
}
Sbit key_up1=P1^0
Sbit key_down1=P1^1
Sbit key_up2=P1^2
Sbit key_down2=P1^2
Sbit key_up3=P1^4
Sbit key_down3=P1^5
Sbit key_up4=P1^6
Sbit key_down4=P1^7
Void my_plus(void)
{
If(key_up1==0)
Alarm[0]+=1.0
If(key_dowm1==0)
Alarm[0]-=1.0
If(key_up2==0)
Alarm[1]+=1.0
If(key_dowm2==0)
Alarm[1]-=1.0
If(key_up3==0)
Alarm[2]+=0.1
If(key_dowm3==0)
Alarm[2]-=0.1
If(key_up4==0)
Alarm[3]+=0.1
If(key_dowm4==0)
Alarm[3]-=0.1
}
Void busy()
{
P0=0X00
X23=0
X24=0
X25=1
While(X23&0X00)
X25=0
}
Void wcmd(uchar cmd)
{
Busy()
X25=0
X24=0
X39=cmd
X25=1
_nop_()
_nop_()
X25=0
}
Vpid wdata(uchar dat)
{
Busy()
X23=1
X24=0
X39=dat
X25=1
_nop_()
_nop_()
X25=0
}
Void sset_page(uchar page)
{
Page=0xb8|page
Wcmd(page)
}
Void set_line(line)
Wcmd(line)
}
Void set_column(uchar column)
{
Column=column&0x3f
Column=0x40|column
Wcmd(column)
}
Void set_onoff(uchar onoff)
{
Onoff|=0x3e
Wcmd(omoff)
}
Void select_screen(uchar screen)
{
Switch(screen)
{
Case0:X21=0;X22=0;break
Case1:X21=0;X22=1;break
Case2:X21=1;X22=0;break
Default:break
}
}
Void clear_screen(uchar screen)
{
Uchar i,j
Select_screen(screen)
For(i=0;i<8;i++)
{
Set_page(i)
Set_column(0)
For(j=0;j<64;j++)
Wdata(0x00)
}
}
Void init
{
Busy()
Select_screen(0)
Set_onoff(0)
Select_screen(0)
Set_onoff(1)
Select_screen(1)
Clear_onoff(0)
Set_line(0)
Wcmd(0x30)
Wcmd(0x0c)
Wcmd(0x06)
Wcmd(0x01)
Void show16X16(uchar screen,uchar page,uchar column,uchar p[])
{
Uchar i
Select_screen(screen)
Set_page(page)
Set_column(column)
For(i=0;i<16;i++)
Wdata(p[i])
Set_page(page+1)
Set_column(column)
For(i=0;i<16;i++)
Wdata(p[i+16])
}
Void show14X16(uchar screen,uchar page,uchar column,uchar p[])
{
Uchar i
Select_screen(screen)
Set_page(page)
Set_column(column)
For(i=0;i<14;i++)
Wdata(p[i])
Set_page(page+1)
Set_column(column)
For(i=0;i<14;i++)
Wdata(p[i+14])
}
Void show6X16(uchar screen,uchar page,uchar column,uchar my_dat)
{
Uchar i,num=0
If((my_day>=0x30)&(my_dat<=0x39))
Num=(my_day-0x30)
Else if(my_dat==’.’)
Num=10
Else
Num=11
Select_screen(screen)
Set_page(page)
Set_column(column)
For(i=0;i<6;i++)
Wdata(my_char[num][i])
Set_page(page+1)
Set_column(column)
For(i=0;i<6;i++)
Wdata(my_char[num][i+6])
}
Void show6X16_str(uchar screen,uchar page,uchar column,uchar *str)
{
Uchat i=0
For(i=0;str[i])!=’\0’;i++)
{
Show6X16(screen,page,(column+7*i),str[i])
}
}
Uchar show_digit(uchar screen,uchar page,uchar column,float num)
{
Uchar temp[10]
Sprintf(temp,”%d\n”,(uint)num)
Show6X16_str(screen,page,column,temp)
Retun 1
}
Uchar show_freq(uchar screen,uchar page,uchar column,float num)
{
Uchar temp[10]
Sprintf(temp,”%d\n”,(uint)num)
Show6X16_str(screen,page,column,temp)
Retun 1
Uchar show_float(uchar screen,uchar page,uchar column,float num)
{
Uchar temp[10]
Sprintf(temp,”%d\n”,(uint)num)
Show6X16_str(screen,page,column,temp_str)
}
這個程序有什么問題可以幫我解決嗎