天天看點

分貝檢測傳感器

以下是官方說明,當時我們這邊官方給的程式是有問題的,在實驗室朋友幫助下重新改寫了代碼,簡潔許多,而且可以正常使用了。 後來公司還找我們要程式,但是比賽前我們還是不給了,雖然沒考到。想到我以前另一個比賽,官方也是沒寫好某個傳感器程式,主要是那個國産晶片寄存器變了,核心是cm0,而且手冊内容很少。我寫了有些時間,給官方看看改改,然後被他們拿去用了= =

分貝檢測傳感器

這裡隻需要注意校驗就行了,我們直接跳過第一個校驗,校驗第二個0xAA就行了。最奇葩的是倒過來的。

分貝檢測傳感器

不需要程式都可以用usb轉序列槽發資料.

bit f_r;
unsigned char f_1,r[3];

void UartInit(void)		//[email protected]
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位資料,可變波特率
	AUXR |= 0x40;		//定時器1時鐘為Fosc,即1T
	AUXR &= 0xFE;		//序列槽1選擇定時器1為波特率發生器
	TMOD &= 0x0F;		//清除定時器1模式位
	TMOD |= 0x20;		//設定定時器1為8位自動重裝方式
	TL1 = 0xFD;		//設定定時初值
	TH1 = 0xFD;		//設定定時器重裝值
	ET1 = 0;		//禁止定時器1中斷
	TR1 = 1;		//啟動定時器1
	ES = 1;                 //Enable UART interrupt
  EA = 1; 
}


void Uart_Isr() interrupt 4
{
    if (RI)
    {
        RI = 0;             //Clear receive interrupt flag
        if(SBUF==0xAA)
				{
					f_1=0;          //P0 show UART data
					f_r=1;
				}
				else if(f_1<3)
				{
					r[f_1]=SBUF;
					f_1++;
				}
    }
}


void main()
{
	
	int db;
	UartInit();
	initlcd();
	dis(2,0," db");
	while(1)
		{
			if(f_r)
			{
				f_r=0;
		if(r[0]==1)
			db=(r[2]<<8)|r[1];
			wcode(0x80);
			wdata(db/1000+0x30);
			wdata(db%1000/100+0x30);
			wdata(db%100/10+0x30);
		 wdata('.');
		 wdata(db%10+0x30);
				//send();
			}
		}
}
           

繼續閱讀