這是一些和聲光控照明有關的資料
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (14.33 KB, 下載次數: 69)
下載附件
2019-4-14 20:55 上傳
0.png (12.41 KB, 下載次數: 78)
下載附件
2019-4-14 20:55 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define delay4us() {_nop_();_nop_();_nop_();_nop_();} //??4us
- unsigned char dat = 0x00;
- unsigned char count = 0x00;
- unsigned char CH;
- unsigned char dis[] = {0x00, 0x00, 0x00};
- unsigned int displaynum;
- sbit RS = P2^0;
- sbit RW = P2^1;
- sbit E= P2^2;
- sbit buzzer= P2^4;
- sbit led= P2^3;
- sbit CS = P3^5;
- sbit Clk = P3^4;
- sbit DATI = P3^3;
- sbit DATO = P3^3;
- void Disp_temper_range(uchar add,uint T);
- void Display();
- uchar code table1[]="GZ:";
- uchar code table2[]="SY:";
- uchar code table5[]="SPEED:";
- uchar code table3[]={0x07,0x05,0x07,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x06,0x09,0x10,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x01,0x12,0x0C,0x00,};
- uchar code table4[]={14,12,7,5,0};
- uchar code table6[]="1";
- uchar code table7[]="2";
- uchar code table8[]="3";
- uchar code table9[]="0";
- uchar d,a,temp,*p,aa,s,m,i=0;
- unsigned int num=0;
- unsigned char gz;
- unsigned char sy;
- unsigned char openflag=0;
- void delay(uint z)
- {
- uint i,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
- void delay_(uint i)
- {
- while(i--);
- }
- void DelayMS(uint ms)
- {
- uchar i;
- while(ms--)
- {
- for(i=0;i<120;i++);
- }
- }
- bit LCD_Busy_Check() //LCD判忙
- {
- bit result;
- RS = 0;
- RW = 1;
- E= 1;
- delay4us();
- result = (bit)(P0&0x80);
- E= 0;
- return result;
- }
- void LCD_Write_Command(uchar cmd) //LCD寫命令
- {
- while(LCD_Busy_Check());
- RS = 0;
- RW = 0;
- E = 0;
- _nop_();
- _nop_();
- P0 = cmd;
- delay4us();
- E = 1;
- delay4us();
- E = 0;
- }
- /*
- void Set_Disp_Pos(uchar pos)
- {
- LCD_Write_Command(pos | 0x80); //???
- }
- */
- void LCD_Write_Data(uchar dat)
- {
- while(LCD_Busy_Check());
- RS = 1;
- RW = 0;
- E = 0;
- P0 = dat;
- delay4us();
- E = 1;
- delay4us();
- E = 0;
- }
- void set_XY(uchar X,uchar Y) //????????
- {
- if(Y==0)
- X+=0x80;
- else
- X|=0xC0;
- LCD_Write_Command(X);
- }
- void DispOneChar(uchar X,uchar Y,uchar Data) //??????
- {
- set_XY(X,Y);
- LCD_Write_Data(Data);
- }
- void LCD_Initialise() //LCD初始化
- {
- LCD_Write_Command(0x38); DelayMS(1);
- LCD_Write_Command(0x38); DelayMS(1);
- LCD_Write_Command(0x38); DelayMS(1);
- LCD_Write_Command(0x38); DelayMS(1);
- LCD_Write_Command(0x0c); DelayMS(1);
- LCD_Write_Command(0x06);
- LCD_Write_Command(0x01);
- delay4us();
- delay4us();delay4us();delay4us();
- }
- void Display_fre(uchar f) //
- {
- uchar a1,a2,a3;
- a1=f/100;
- a2=f/10%10;
- a3=f%10;
- DispOneChar(4,0,0x30+a1);
- DispOneChar(5,0,0x30+a2);
- DispOneChar(6,0,0x30+a3);
- }
- void Display_fre1(uchar s)
- {
- uchar b1,b2,b3;
- b1=s/100;
- b2=s/10%10;
- b3=s%10;
- DispOneChar(13,0,0x30+b1);
- DispOneChar(14,0,0x30+b2);
- DispOneChar(15,0,0x30+b3);
- }
- void Display_fre2(uint ss)
- {
- uint c1,c2,c3,c4;
- c1=ss/1000;
- c2=ss/100%10;
- c3=ss/10%10;
- c4=ss%10;
- DispOneChar(7,1,0x30+c1);
- DispOneChar(8,1,0x30+c2);
- DispOneChar(9,1,0x30+c3);
- DispOneChar(10,1,0x30+c4);
- }
- void DispChars(uchar X,uchar Y,uchar *p,uchar count) //?????
- {
- uchar i;
- for(i=0;i<count;i++)
- {
- set_XY(X,Y);
- LCD_Write_Data(*p);
- X++;
- p++;
- }
- }
- /*****CH=0X00,對CH1進行轉換,TGS260******/
- unsigned char adc0832(unsigned char CH) //模數轉化
- {
- unsigned char i,test,adval;
- adval = 0x00;
- test = 0x00;
- Clk = 0;
- DATI = 1;
- _nop_();
- CS = 0;
- _nop_();
- Clk = 1;
- _nop_();
- if ( CH == 0x00 ) //CH=0X00,對CH1進行轉換,TGS260
- {
- Clk = 0;
- DATI = 1; //
- _nop_();
- Clk = 1;
- _nop_();
- Clk = 0;
- DATI = 1;
- _nop_();
- Clk = 1;
- _nop_();
- }
- else
- {
- Clk = 0;
- DATI = 1;
- _nop_();
- Clk = 1;
- _nop_();
- Clk = 0;
- DATI = 0;
- _nop_();
- Clk = 1;
- _nop_();
- }
- Clk = 0;
- DATI = 1;
- for( i = 0;i < 8;i++ ) //
- {
- _nop_();
- adval <<= 1;
- Clk = 1;
- _nop_();
- Clk = 0;
- if (DATO)
- adval |= 0x01;
- else
- adval |= 0x00;
- }
- for (i = 0; i < 8; i++)
- {
- test >>= 1;
- if (DATO)
- test |= 0x80;
- else
- test |= 0x00;
- _nop_();
- Clk = 1;
- _nop_();
- Clk = 0;
- }
- if (adval == test)
- dat = test;
- _nop_();
- CS = 1;//ADC0832
- DATO = 1;
- Clk = 1;
- return dat;
- }
- void main(){
- led = 1;
- LCD_Initialise(); //LED初始化
- // DelayMS(5);
- DispChars(0,0,p=table1,4); //??“tgs”
- // DelayMS(5);
- DispChars(8,0,p=table2,4); //??“mq2”
- while (1){
-
- gz=100-100*adc0832(0x00)/255;
- Display_fre(gz);
- sy= 100*adc0832(0x11)/255;
- Display_fre1(sy);
- if (gz<50){
- openflag = 0;
- }
- if ((50<=gz)&&(sy>40)){
- openflag = 1;
- }
- else {
- openflag = 0;
- }
- if (openflag==1){
- led = 0;
- num++;
- delay(200);
- if (num>180){
- num=0;
- led=1;
- openflag = 0;
- }
- }
- else{
- if (num!=0){
- num++;
- delay(200);
- if (num>180){
- num=0;
- led=1;
- openflag = 0;
- }
- }
-
- }
- }
- }
復制代碼
所有資料51hei提供下載:
聲控燈.rar
(81.57 KB, 下載次數: 160)
2019-4-14 11:21 上傳
點擊文件名下載附件
原理圖加仿真 下載積分: 黑幣 -5
|