以下程序是本人为课堂作业所写,基本完整作业要求,当然也存在好些问题,如不能从0开始输入。 作为一个单片机技术入门级学生将此程序上传,希望能交到爱好电子技术的朋友,互相学习。
(P0脚用在显示某数字,P2脚控制某位,P3脚控制识别按键)
单片机源程序如下:
- #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)
|