以下程序是本人為課堂作業所寫,基本完整作業要求,當然也存在好些問題,如不能從0開始輸入。 作為一個單片機技術入門級學生將此程序上傳,希望能交到愛好電子技術的朋友,互相學習。
0.png (136.07 KB, 下載次數: 66)
下載附件
2017-10-31 03:18 上傳
(P0腳用在顯示某數字,P2腳控制某位,P3腳控制識別按鍵)
0.png (42.95 KB, 下載次數: 75)
下載附件
2017-10-31 03:18 上傳
0.png (54.36 KB, 下載次數: 42)
下載附件
2017-10-31 03:19 上傳
單片機源程序如下:
- #include<reg52.h>
- void delay(unsigned int j ) //基本延時單位1ms
- {
- unsigned int e,f;
- for(e=0;e<j;e++)
- for(f=0;f<=148;f++);
- }
- int saomiao() //掃描鍵盤,輸出一個數,0~9代表數;10~14代表符號
- {
- int i,j,y=20,x=20,temp;
- int aa[]={0xf7,0xfb,0xfd,0xfe,};
- dingwei:
- P3=0xf0;
- if(P3!=0xf0) //判斷是否有輸入
- {
- delay(5); //防抖(延時10ms)
- if(P3!=0xf0) //再判斷是否有輸入
- {
- for(i=0; i<4; i++)
- {
- P3 = aa[i];
- temp=0x10;
- for(j=0; j<4; j++)
- {
- if(!(P3 & temp)) //判斷P1口高4位某一行為低電平
- x=i+j*4; //使用中間變量X
- temp <<= 1;
- }
- }
- }
- }
- if(P3!=0xf0) goto dingwei; //判斷是否松開按鍵,防止重復賦值
- switch(x)
- {
- case 0:y=10; break;
- case 1:y=0; break;
- case 2:y=15; break;
- case 4:y=1; break;
- case 5:y=2; break;
- case 6:y=3; break;
- case 8:y=4; break;
- case 9:y=5; break;
- case 10:y=6;break;
- case 12:y=7;break;
- case 13:y=8; break;
- case 14:y=9;break;
- default:y=20;
- }
- return y; //返回鍵盤編號,方便起見:數為0~9;
- } //符號 復位 = 分別為10,15。
- void xianshii(long a) //顯示部分
- {
- long b=0;
- int i=0,j=0;
- int shuzi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
- b=a;
- while(b=(b/10)) j++; //判斷輸入數的個數
- for(i=0;i<j+1;i++) //輸出數字
- {
- P2=0x01<<i;
- P0=shuzi[a%10];
- a=a/10;
- delay(3);
- P0=0Xff;
- }
- }
- /*******主函數***********/
- main()
- {
- int y=0;
- long k=0;
- long mima=20130521; //初始化密碼
- while(1)
- {
- y=saomiao(); //掃描輸入數字
- if(y<=9) //數字
- {
- k=k*10+y;
- }
- if(y==15) //輸入=,確認密碼
- {
- if(k==mima)
- P1=0x00; //密碼正確燈就亮
- else
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
單片機密碼鎖簡單c語言程序.doc
(63 KB, 下載次數: 90)
2017-10-30 19:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|