|
很簡(jiǎn)單的一個(gè)程序,大一的時(shí)候?qū)懙模?/font>
今天有人加我問(wèn)這個(gè)問(wèn)題,就把代碼翻出來(lái)了,剛好分享出來(lái)
就是用外部中斷檢測(cè)判斷狀態(tài)的先后,來(lái)判斷人的進(jìn)出,在main里加減
單片機(jī)程序源碼如下:
- #include <reg52.h>
- #include <string.h>
- #define LCD1602_DB P0
- sbit red = P2^0; //紅外1
- sbit red1 = P2^1; //紅外2
- sbit ADDR0 = P1^0;
- sbit ADDR1 = P1^1;
- sbit ADDR2 = P1^2;
- sbit ADDR3 = P1^3;
- sbit ENLED = P1^4;
- unsigned char flag1s = 0;
- unsigned char flag2s = 0;
- unsigned char code LedChar[] = { //數(shù)碼管顯示字符轉(zhuǎn)換表
- 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
- 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
- };
- unsigned char LedBuff[6] = { //數(shù)碼管顯示緩沖區(qū),初值 0xFF 確保啟動(dòng)時(shí)都不亮
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
- };
- unsigned char i = 0;
- shu(unsigned char sec);
- void delay(unsigned int i)
- {
- while (i--);
- }
- shu(unsigned char sec)
- {
- LedBuff[0] = LedChar[sec%10];
- LedBuff[1] = LedChar[sec/10%10];
- LedBuff[2] = LedChar[sec/100%10];
- LedBuff[3] = LedChar[sec/1000%10];
- LedBuff[4] = LedChar[sec/10000%10];
- LedBuff[5] = LedChar[sec/100000%10];
- }
- void main()
- {
- unsigned int sec = 0,j = 0;
- red = 1;
- red1 = 1;
- ENLED = 0;
- ADDR3 = 1;
- TMOD = 0x01;
- TH0 = 0xFC;
- TL0 = 0x67;
- TR0 = 1;
- EA = 1;
- ET0 = 1;
- sec = 0;
- shu(sec);
- while(1)
- {
- shu(sec);
- if(flag1s == 1 )
- {
- flag1s = 0;
- sec++;
-
- }
- if(flag2s == 1 )
- {
- flag2s = 0;
- if(sec > 0)
- sec--;
- }
- shu(sec);
- /*for(;sec<20;sec++)
- {itoa(sec, s);
- delay(100009);
- LcdShowStr(8, 0, s); } */
-
- }
- }
- void InterruptTimer0() interrupt 1
- {
- TH0 = 0xFC; //重新加載初值
- TL0 = 0x67;
- if (red == 0&&red1==1)
- {
- delay(99);
- if(red1==0)
- flag1s = 1;
- }
- if (red1 == 0&&red == 1)
- {
- delay(99);
- if(red == 0)
- flag2s = 1;
- }
- switch (i)
- {
- case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0]; break;
- case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1]; break;
- case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2]; break;
- case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3]; break;
- case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4]; break;
- case 5: ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5]; break;
- default: break;
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|