38k遙控器
0.png (35.68 KB, 下載次數(shù): 58)
下載附件
2016-4-13 21:36 上傳
全部代碼下載:
38k紅外遙控器(用).rar
(14.75 KB, 下載次數(shù): 12)
2016-4-13 20:36 上傳
點擊文件名下載附件
38k遙控器 下載積分: 黑幣 -5
單片機計算器程序 數(shù)碼管顯示:
- #include<reg51.h>
- #include<math.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x06,0xbf};//共陽極
- ulong num=0,qnum=0;
- uchar key0=0,ikey0=0,kkey=0; //qnum為前一個鍵值,當為0時表示沒有前一個鍵值,ikey0表示當存在前一個鍵值下進行加減乘除運算
- //uchar num1,num2,num3,num4,num5,num6; //key0表示當為1時,是數(shù)字鍵,為0時,是清零鍵,為2時,是運算鍵,為3時,等號鍵
- void delay(uint d)
- {
- while(d-->0);
- }
- void error() //當數(shù)值溢出的時候
- {
- P2 = 0x00;
- P2 = 0xff;
- P0 = tab[10];
- delay(100);
- P2 = 0x00;
- P0 = 0xff;
- }
- void display(ulong num0) //顯示函數(shù)
- {
- if(num0>999999&&num0<-99999) //當數(shù)值溢出時
- error();
- else if(num0>=0&&num0<=999999) //當數(shù)值為正數(shù)時
- {
- P2 = 0x00;
- dis1 = 1; //顯示最高位,第一位
- P0 = tab[num0/100000];
- delay(100);
- dis1 = 0;
- P0 = 0xff;
-
- P2 = 0x00;
- dis2 = 1; //第二位
- P0 = tab[(num0/10000)%10];
- delay(100);
- dis2 = 0;
- P0 = 0xff;
-
-
- P2 = 0x00;
- dis3 = 1; //第三位
- P0 = tab[(num0/1000)%10];
- delay(100);
- dis3 = 0;
- P0 = 0xff;
-
- P2 = 0x00;
- dis4 = 1; //第四位
- P0 = tab[(num0/100)%10];
- delay(100);
- dis4 = 0;
- P0 = 0xff;
-
- P2 = 0x00;
- dis5 = 1; //第五位
- P0 = tab[(num0/10)%10];
- delay(100);
- dis5 = 0;
- P0 = 0xff;
-
- P2 = 0x00;
- dis6 = 1; //顯示最低位,第六位
- P0 = tab[num0%10];
- delay(100);
- dis6 = 0;
- P0 = 0xff;
- }
- else //當數(shù)值為負數(shù)時
- {
- num0 = abs(num0);
- P2 = 0x00;
- dis1 = 1; //顯示最高位,第一位
- P0 = tab[11];
- delay(100);
- dis1 = 0;
- P0 = 0xff;
-
- P2 = 0x00;
- dis2 = 1; //第二位
- P0 = tab[(num0/10000)%10];
- delay(100);
- dis2 = 0;
- P0 = 0xff;
-
-
- P2 = 0x00;
- dis3 = 1; //第三位
- P0 = tab[(num0/1000)%10];
- delay(100);
- dis3 = 0;
- P0 = 0xff;
-
- P2 = 0x00;
- dis4 = 1; //第四位
- P0 = tab[(num0/100)%10];
- delay(100);
- dis4 = 0;
- P0 = 0xff;
-
- P2 = 0x00;
- dis5 = 1; //第五位
- P0 = tab[(num0/10)%10];
- delay(100);
- dis5 = 0;
- P0 = 0xff;
-
- P2 = 0x00;
- dis6 = 1; //顯示最低位,第六位
- P0 = tab[num0%10];
- delay(100);
- dis6 = 0;
- P0 = 0xff;
- }
- }
- void key() //鍵盤掃描函數(shù)
- {
- uchar temp;
- P1 = 0xff;
- P1 = 0Xef; //檢測第一行
- temp = P1;
- temp = temp&0x0f;
- if(P1!=0X0f)
- {
- delay(5);
- temp = P1;
- temp = temp&0x0f;
- if(P1!=0X0f)
- {
- temp = P1;
- switch(temp)
- {
- case 0xe7: key0 = 0; break; //-----清屏鍵
- case 0xeb: key0 = 1; num = num*10+0; kkey = 1; break; //-------'0'
- case 0xed: key0 = 3; break; //-----等號鍵=
- case 0xee: key0 = 2; ikey0 = 10; break; //------加號鍵+
- }
-
- while(temp!=0x0f)
- {
- temp = P1;
- temp = temp&0x0f;
- }
- //P0 = tab[h];
- }
- }
- P1 = 0xff;
- P1 = 0Xdf; //檢測第二行
- temp = P1;
- temp = temp&0x0f;
- if(P1!=0X0f)
- {
- delay(5);
- temp = P1;
- temp = temp&0x0f;
- if(P1!=0X0f)
- {
- temp = P1;
- switch(temp)
- {
- case 0xd7: key0 = 1; num = num*10+1; kkey = 1; break; //------'1'
- case 0xdb: key0 = 1; num = num*10+2; kkey = 1; break; //------'2'
- case 0xdd: key0 = 1; num = num*10+3; kkey = 1; break; //-------'3'
- case 0xde: key0 = 2; ikey0 = 11; break; //-----減號鍵-
- }
-
- while(temp!=0x0f)
- {
- temp = P1;
- temp = temp&0x0f;
- }
- //P0 = tab[h];
- }
- }
- P1 = 0xff;
- P1 = 0Xbf; //檢測第三行
- temp = P1;
- temp = temp&0x0f;
- if(P1!=0X0f)
- {
- delay(5);
- temp = P1;
- temp = temp&0x0f;
- if(P1!=0X0f)
- {
- temp = P1;
- switch(temp)
- {
- case 0xb7: key0 = 1; num = num*10+4; kkey = 1; break; //-------'4'
- case 0xbb: key0 = 1; num = num*10+5; kkey = 1; break; //-------'5'
- case 0xbd: key0 = 1; num = num*10+6; kkey = 1; break; //-------'6'
- case 0xbe: key0 = 2; ikey0 = 12; break; //------乘號鍵*
- }
-
- while(temp!=0x0f)
- {
- temp = P1;
- temp = temp&0x0f;
- }
- //P0 = tab[h];
- }
- }
- P1 = 0xff;
- P1 = 0X7f; //檢測第四行
- temp = P1;
- temp = temp&0x0f;
- if(P1!=0X0f)
- {
- delay(5);
- temp = P1;
- temp = temp&0x0f;
- if(P1!=0X0f)
- {
- temp = P1;
-
- switch(temp)
- {
- case 0x77: key0 = 1; num = num*10+7; kkey = 1; break; //-------'7'
- case 0x7b: key0 = 1; num = num*10+8; kkey = 1; break; //--------'8'
- case 0x7d: key0 = 1; num = num*10+9; kkey = 1; break; //--------'9'
- case 0x7e: key0 = 2; ikey0 = 13; break; //-------除號鍵
-
- }
-
- while(temp!=0x0f)
- {
- temp = P1;
- temp = temp&0x0f;
- }
- }
- }
-
- }
- void count()
- {
- key();
- if(key0 == 0) //清零
- {
- num = 0;qnum = 0;
- display(num);
- }
- else if(key0 == 1) //數(shù)字鍵,顯示數(shù)字
- {
- display(num);
-
- }
- else if(key0 == 8)
- {
- display(qnum);
- }
- else if(key0 == 2) //當為運算符號鍵時
- {
- qnum = num;
- num = 0;
- key0 = 8;
-
- }
- else if(key0 == 3) //等號鍵
- {
- switch(ikey0)
- {
- case 10:num = num + qnum; key0 = 2; break;
- case 11:num = qnum - num; key0 = 2; break;
- case 12:num = num * qnum; key0 = 2; break;
- case 13:num = qnum / num; key0 = 2; break;
- //default break;
- }
- //}
- }
- }
-
- void main()
- { while(1)
- {
- //display(num);
- count();
- }
- }
復制代碼
|