看到一位厲害小哥自己做的,作為小白覺得不錯,分享出來
紅外報警器(雙顯示)
單片機源程序如下:
- #include <ioCC2530.h>
- #include "lcd.h"
- typedef unsigned char uchar;
- typedef unsigned int uint;
- #define LED1 P1_0 //定義P1.0口為LED1控制端
- #define LED2 P1_1 //定義P1.1口為LED2控制端
- #define LED3 P1_4 //定義P1.4口為LED3控制端
- #define DATA_PIN P0_4 //定義P0.4口為傳感器的輸入端
- //串口初始化函數(shù)
- void InitUart(void)
- {
- PERCFG = 0x00; //外設控制寄存器 USART 0的IO位置:0為P0口位置1
- P0SEL |= 0x0c; //P0_2,P0_3用作串口(外設功能)
- P2DIR &= ~0XC0; //P0優(yōu)先作為UART0
- U0CSR |= 0x80; //設置為UART方式
- U0GCR |= 11;
- U0BAUD |= 216; //波特率設為115200
- UTX0IF = 0; //UART0 TX中斷標志初始置位0
- }
- //串口發(fā)送函數(shù)
- void UartSendString(char *Data, int len)
- {
- uint i;
- for(i=0; i<len; i++)
- {
- U0DBUF = *Data++;
- while(UTX0IF == 0);
- UTX0IF = 0;
- }
- }
- //設置LED燈和P0.4相應的IO口
- void InitLed(void)
- {
- P1DIR |= 0x13; //P1.0、P1.1、P1.4定義為輸出
- P0SEL &= ~0x10;
- P0DIR &= ~0x10; //P0.4定義為輸入口
- P2INP |= 0x20;
- LED2 = 0; //點亮D2 提示程序已運行
- }
- void main(void)
- {
- uchar i=0,j=0;
- CLKCONCMD &= ~0x40; //設置系統(tǒng)時鐘源為32MHZ晶振
- while(CLKCONSTA & 0x40); //等待晶振穩(wěn)定為32M
- CLKCONCMD &= ~0x47; //設置系統(tǒng)主時鐘頻率為32MHZ
- InitLed();
- InitUart();
- InitUart();
- LCD_Init();
- LCD_Fill(0x00);
- for(i=1; i<6; i++)
- {
- LCD_P16x16Ch_1(i*16,0,i-1);
- }
-
-
- while(1)
- {
- if(DATA_PIN == 1)
- {
- LED1 = 0; //有人時LED1亮
- UartSendString("ON ", 3); //串口發(fā)送數(shù)據(jù),提示用戶
- for(i=3;i<6;i++)
- {
- LCD_P16x16Ch_3(i*16,3,i-3);
- }
- for(i=2;i<7;i++)
- {
- LCD_P16x16Ch_4(i*16,5,i-2);
- }
- j = 1;
- }
-
- else
- {
- LED1 = 1; //無人時LED1熄滅
- UartSendString("OFF ", 4); //串口發(fā)送數(shù)據(jù),提示用戶
- if(j == 1)
- {
- LCD_Fill(0x00);
- for(i=1; i<6; i++)
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
紅外報警器(雙顯示).rar
(32.23 KB, 下載次數(shù): 48)
2017-12-20 21:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|