// ad讀取函數////////////////////////////////////////////////////
uchar ad0832read(uchar channel)
{
uchar i=0,value1=0,value2=0;
SCL=0;
delay_1ms(2);
DO=1;
delay_1ms(2);
CS=0; //開始
delay_1ms(2);
SCL=1; //第一個上升沿
delay_1ms(2);
SCL=0;
delay_1ms(2);
DO=1;
delay_1ms(2);
SCL=1; //第二個上升沿
delay_1ms(2);
SCL=0;
delay_1ms(2);
DO=channel;
delay_1ms(2);
SCL=1; //第三個上升沿
delay_1ms(2);
SCL=0;
delay_1ms(2);
DO=1;
delay_1ms(2);
for(i=0;i<8;i++) //從高位到低位
{
SCL=1;
delay_1ms(2);
SCL=0;
delay_1ms(2);
if(DO)
{
value1|=0x80>>i;
delay_1ms(2);
}
}
for(i=0;i<8;i++) //從低位到 高位
{
if(DO)
{
value2|=0x80<<i;
delay_1ms(2);
}
SCL=1;
delay_1ms(2);
SCL=0;
delay_1ms(2);
}
CS=1;
SCL=1;
delay_1ms(1);
DO=1;//數據讀取完成,釋放總線
delay_1ms(2);
return (value1);
}
/********************獨立按鍵程序*****************/
uchar key_can; //按鍵值
void key() //獨立按鍵程序
{
static uchar key_new;
key_can = 20; //按鍵值還原
P3 |= 0xf0;
if((P3 & 0xf0) != 0xf0) //按鍵按下
{
delay_1ms(1); //按鍵消抖動
if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
{ //確認是按鍵按下
key_new = 0;
switch(P3 & 0xf0)
{
case 0xe0: key_can = 4; break; //得到k1鍵值
case 0xd0: key_can = 3; break; //得到k2鍵值
case 0xb0: key_can = 2; break; //得到k3鍵值
case 0x70: key_can = 1; break; //得到k4鍵值
}
}
}
else
key_new = 1;
}
void main()
{
beep = 0; //開機蜂鳴器叫一聲
delay_1ms(1);
P0 = P1 = P2 = P3 = 0xff; //初始化IO口
init_1602(); //1602液晶初始化
delay_1ms(750);
while(1)
{
key(); //獨立按鍵程序
if(key_can!= 0)
{
key_with(); //按鍵按下要執行的程序
}
flag_250ms ++;
if(flag_250ms >=250)
{
flag_250ms = 0;
clock_h_l(); //報警函數
temperature =read_temp(); //讀取溫度值
delay_1ms(2);
if(menu_1 == 0)
{
guangxian = ad0832read(1);
guangxian = guangxian * 99 / 255;
shidu = ad0832read(0); //讀出濕度
shidu=shidu * 99 / 255;
write_sfm2(1,8,shidu); //顯示濕度
write_sfm2(2,4,temperature); //顯示溫度
write_sfm2(2,11,guangxian); //顯示光線
}
}
delay_1ms(1);
}
}
|