|
|
我把這個(gè)程序改了移到STC8單片機(jī)上了
//#include "reg51.h"
//#include "intrins.h"
//sbit smg1=P2^0;//數(shù)碼管
//sbit smg2=P2^1;
//sbit led1=P1^1;//LED強(qiáng)
//sbit led2=P1^2;//中
//sbit led3=P1^3;//弱
//sbit lamp=P3^5;//燈
//sbit beep=P3^6;//蜂鳴器
//sbit k1=P3^0;//按鈕
//sbit CLK= P1^5;//時(shí)鐘,初始狀態(tài)為0
//sbit DIO= P1^6;//數(shù)據(jù)輸入
////sbit DO= P1^7; // 數(shù)據(jù)輸出
//sbit CS= P1^4;
#include<stc8.h>
#include "intrins.h"
sbit smg1=P5^4; //數(shù)碼管10位
sbit smg2=P5^5; //數(shù)碼管個(gè)位
sbit led1=P3^4; //強(qiáng)
sbit led2=P3^5; //中
sbit led3=P3^6; //弱
sbit lamp=P3^7; //燈
sbit CLK= P3^0;//時(shí)鐘,初始狀態(tài)為0
sbit DIO= P3^1;//數(shù)據(jù)輸入
sbit CS= P3^3;
//unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰0-9
unsigned char code smgduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽(yáng)0-9
unsigned char light=0;//光照
unsigned char time=0,flag=0;
void Delay_2us(void)
{
_nop_();
_nop_();
}
/*********************************************
讀取ADC
**********************************************/
unsigned char ADC_read_data(bit channel)//通道ch0
{
unsigned char i,dat0=0,dat1=0;
//-----第一次下降沿之前DI置高,啟動(dòng)信號(hào)-----
CS=0; //片選信號(hào)置低,啟動(dòng)AD轉(zhuǎn)換芯片
CLK=0; //時(shí)鐘置低電平
DIO=1; //開(kāi)始信號(hào)為高電平
Delay_2us();
CLK=1; //產(chǎn)生一個(gè)正脈沖,在時(shí)鐘上升沿,輸入開(kāi)始信號(hào)(DI=1)
Delay_2us();
CLK=0; //第1個(gè)時(shí)鐘下降沿
DIO=1;
Delay_2us();
CLK=1; //第2個(gè)下降沿輸入DI=1,表示雙通道單級(jí)性輸入
Delay_2us();
//-----在第2個(gè)下降沿,模擬信號(hào)輸入模式選擇(1:?jiǎn)文P盘?hào),0:雙模差分信號(hào))-----
CLK=0; DIO=channel; //第3個(gè)下降沿,設(shè)置DI,選擇通道
Delay_2us();
CLK=1;
Delay_2us();
//-----在第3個(gè)下降沿,模擬信號(hào)輸入通道選擇(1:通道CH1,0:通道CH0)-----
CLK=0;
DIO=1; //第4個(gè)下降沿之前,DI置高,準(zhǔn)備接收數(shù)據(jù)
Delay_2us();
for(i=0;i<8;i++) //第4~11共8個(gè)下降沿讀數(shù)鋸(MSB->LSB)
{
CLK=1;
Delay_2us();
CLK=0;
Delay_2us();
dat0=dat0<<1|DIO;
}
for(i=0;i<8;i++) //第11~18共8個(gè)下降沿讀數(shù)據(jù)(LSB->MSB)
{
dat1=dat1|((unsigned char)(DIO)<<i);
CLK=1;
Delay_2us();
CLK=0;
Delay_2us();
}
CS=1;
return(dat0==dat1)?dat0:0; //判斷dat0與dat1是否相等
}
// unsigned char temp0,temp1,i;
// CS=0;
// temp0=0;
// temp1=0;
// _nop_();
// _nop_();
// DI=1;//開(kāi)始位
// _nop_();
// _nop_();
// CLK=1;
// _nop_();
// _nop_();
// CLK=0;
// _nop_();
// _nop_();
// DI=0;
// _nop_();
// _nop_();
////選擇通道0
// DI=1;
// _nop_();
// CLK=1;//上升沿DI=1
// _nop_();
// CLK=0;//1個(gè)下降沿DI=1
// _nop_();
// DI=0;
// _nop_();
// CLK=1;
// _nop_();
// CLK=0;//第3個(gè)上升沿DI=0
// _nop_();
// DI=1;
////********通道選擇結(jié)束開(kāi)始讀取轉(zhuǎn)換后的二進(jìn)制數(shù)****
////下降沿讀數(shù),一下進(jìn)行判斷和處理,共8次
//for(i=0;i<8;i++)
// {
// temp0=temp0<<1;
// CLK=1;
// if(DO)
// temp0++;
// _nop_();
// CLK=0;
// }
//for(i=0;i<8;i++)
// {
// temp1=temp1>>1;
// CLK=1;
// if(DO)
// temp1=temp1 +0x80;
// _nop_();
// CLK=0;
// }
// CS=1;
// return temp0;
//}
void delay(unsigned int i)//延時(shí)
{
unsigned char j;
for(j=0;j<i;j++);
}
void main()
{
P1M0=0xFF;
P1M1=0x00;
P3M0=0x00;
P3M1=0x00;
P5M0=0x10;
P5M1=0x00;
led1=1;led2=1;led3=1;
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;//打開(kāi)定時(shí)器0中斷允許
EA=1;//打開(kāi)總中斷
TR0=1;//打開(kāi)定時(shí)器
while(1)
{
//顯示
// P0=smgduan[light/10];//光照
// smg1=0;
// delay(100);
// smg1=1;
// P0=smgduan[light%10];
// smg2=0;
// delay(100);
// smg2=1;
P1=smgduan[light/10];//光照
smg1=0;
delay(100);
smg1=1;
P1=smgduan[light%10];
smg2=0;
delay(100);
smg2=1;
//停止報(bào)警
// if(!k1)
// {
// flag=1;
// beep=1;
// }
}
}
//定時(shí)器0中斷
void Timer0() interrupt 1
{
unsigned int i;
if(time<10)//0.5s
time++;
else
{
time=0;
i=ADC_read_data(0);
light=i*60/256;
//判斷
if((light>50)&&(flag==0))//強(qiáng)
{
lamp=1;
led1=0;led2=1;led3=1;
}
if((light<51)&&(light>20))//中
{
led1=1;led2=0;led3=1;
//beep=1;
lamp=1;
flag=0;
}
if(light<21)//弱
{
led1=1;led2=1;led3=0;
//beep=1;
lamp=0;
flag=0;
}
}
TH0=0X3C;
TL0=0XB0;
} |
|