?? waterheater12_25sourcefile.c
字號:
#include<pic1684.h>
unsigned char num;
unsigned int i=0,p=0;
unsigned char One,Ten;
const unsigned Code[13]=//0 1 2 3 4 5 6 7 8 9 OFF SPEAKER LED //
{0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff, 0x75, 0xbf };
void Send(unsigned char One_1,unsigned char Ten_1,unsigned char bai_1);//發送要顯示的數據、報警
void Delay(unsigned int Sec);//延時Sec秒
main(void)
{
TRISA=0x10; //PORTA_RA0:RA3口為輸出,RA4口為模擬A/D輸入,
TRISB=0xff; //RB口輸入,
RA3=0;
while(1)
{
i=0;
//下面Code模擬A/D
TRISA=0x00; //PORTA口為輸出
RA4=0; Delay(10); //RA4為低并保持
RA4=1; TRISA=0x10; //RA4為高,并置為輸入
while(RA4!=1) //從 RA4=0到RA4=1計數
{
i++;
if(i>99)break;
}
i=99-i; //負溫度系數溫度傳感器轉換
Ten=i/10%10; //將計數值轉化為水溫值的十位顯示編碼表(數組Code[])的下標值。
One=i%10; //將計數值轉化為水溫值的個位顯示編碼表(數組Code[])的下標值。
Send(Code[One],Code[Ten],Code[12]); //根據下標值從常數表中提取編碼,發送給移位寄存器(Code[12]=0xbf,LED亮 SPEAKER不響)
Delay(15); //延時3秒
p++;//循環次數累加
num=PORTB;//讀取PORTB口
for(i=7;i>=0;--i) //逐個查詢PORTB各腳是否為低電平
{if((num>>i)%2==0)break;} //為低退出并記錄i的值,對應水位值
if(i==255)i=0;
i=i*10;
Ten=i/10%10; //將數值轉化為水位值的十位顯示編碼表的下標值。
One=i%10; //將數值轉化為水位值的個位顯示編碼表的下標值。
Send(Code[One],Code[Ten],Code[10]); //根據下標值從常數表中提取編碼,發送給移位寄存器(Code[10]=0xff,LED不亮 SPEAKER不響)
Delay(5); //延時3秒
if(p>=10) //每循環10次數,嘀--嘀響一次
{
unsigned int n;
p=0;
Send(Code[One],Code[Ten],Code[11]); //Code[11]=0x75,LED不亮 SPEAKER響
for(n=0;n<=0x0ed8;n++){;}
Send(Code[One],Code[Ten],Code[10]); //Code[10]=0xff,LED不亮 SPEAKER不響
for(n=0;n<=0x2dff;n++){;}
Send(Code[One],Code[Ten],Code[11]); //Code[11]=0x75,LED不亮 SPEAKER響
for(n=0;n<=0x0ed8;n++){;}
Send(Code[One],Code[Ten],Code[10]); //Code[10]=0xff,LED不亮 SPEAKER不響
}
if(Ten>=7) //水位數值超過7,嘀--響一次
{
Send(Code[One],Code[Ten],Code[11]); //Code[11]=0x75,LED不亮 SPEAKER響
Delay(20);
Send(Code[One],Code[Ten],Code[10]); //Code[10]=0xff,LED不亮 SPEAKER不響
}
}
}
void Send(unsigned char One,unsigned char Ten,unsigned char bai) //發送要顯示的數據、報警
{
unsigned char j;
unsigned char l;
for(l=0;l<=7;l++)//發送個位編碼
{
RA0=(One>>l)%2; RA1=0;
for(j=0;j<2;j++){}
RA1=1;for(j=0;j<2;j++){}RA1=0;
}
for(l=0;l<=7;l++)//發送十位編碼
{
RA0=(Ten>>l)%2;RA1=0;
for(j=0;j<2;j++){}
RA1=1;for(j=0;j<2;j++){}RA1=0;
}
for(l=0;l<=7;l++)//發送LED,SPEAKER控制位編碼
{
RA0=(bai>>l)%2;RA1=0;
for(j=0;j<2;j++){}
RA1=1;for(j=0;j<2;j++){}RA1=0;
}
}
void Delay(unsigned int Sec) //延時Sec秒
{
unsigned int m,n;
for(m=0;m<=Sec;m++)
{for(n=0;n<=0x1fff;n++){;}}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -