标题: 单片机密码锁简单c语言程序的课堂作业 [打印本页]

作者: 井绳开    时间: 2017-10-30 19:25
标题: 单片机密码锁简单c语言程序的课堂作业
以下程序是本人为课堂作业所写,基本完整作业要求,当然也存在好些问题,如不能从0开始输入。
  作为一个单片机技术入门级学生将此程序上传,希望能交到爱好电子技术的朋友,互相学习。

(P0脚用在显示某数字,P2脚控制某位,P3脚控制识别按键)


单片机源程序如下:
  1. #include<reg52.h>
  2. void delay(unsigned int j )             //基本延时单位1ms
  3. {
  4.         unsigned int e,f;
  5.         for(e=0;e<j;e++)
  6.         for(f=0;f<=148;f++);        
  7. }

  8. int saomiao()                          //扫描键盘,输出一个数,0~9代表数;10~14代表符号
  9. {  
  10.    int  i,j,y=20,x=20,temp;           
  11.    int  aa[]={0xf7,0xfb,0xfd,0xfe,};
  12. dingwei:
  13.     P3=0xf0;                                                                                         
  14.     if(P3!=0xf0)                                        //判断是否有输入
  15.            {                                                   
  16.              delay(5);                                                //防抖(延时10ms)
  17.                    if(P3!=0xf0)                            //再判断是否有输入
  18.                       {         
  19.                           for(i=0; i<4; i++)
  20.                           {
  21.                            P3 = aa[i];
  22.                                        temp=0x10;                                                                                                                                                                  
  23.                            for(j=0; j<4; j++)
  24.                               {
  25.                                     if(!(P3 & temp))                 //判断P1口高4位某一行为低电平
  26.                                          x=i+j*4;                    //使用中间变量X
  27.                                     temp <<= 1;
  28.                               }        
  29.                           }
  30.                           }
  31.             }
  32.     if(P3!=0xf0) goto dingwei;                           //判断是否松开按键,防止重复赋值
  33.         switch(x)
  34.             {
  35.                    case 0:y=10; break;
  36.                    case 1:y=0; break;
  37.                    case 2:y=15; break;
  38.                    case 4:y=1; break;
  39.                    case 5:y=2; break;
  40.                    case 6:y=3; break;
  41.                    case 8:y=4; break;
  42.                    case 9:y=5; break;
  43.                    case 10:y=6;break;
  44.                    case 12:y=7;break;
  45.                    case 13:y=8; break;
  46.                    case 14:y=9;break;
  47.                    default:y=20;
  48.                 }
  49.         return y;                          //返回键盘编号,方便起见:数为0~9;
  50. }                                                               //符号 复位 = 分别为10,15。

  51. void xianshii(long a)                       //显示部分
  52. {

  53.      long b=0;
  54.          int i=0,j=0;
  55.          int shuzi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};                                                           
  56.          b=a;                          
  57.           while(b=(b/10)) j++;                         //判断输入数的个数         
  58.          for(i=0;i<j+1;i++)                             //输出数字
  59.                  {
  60.                    P2=0x01<<i;
  61.                    P0=shuzi[a%10];
  62.                    a=a/10;
  63.                    delay(3);
  64.                    P0=0Xff;                                         
  65.              }                           
  66. }

  67.       /*******主函数***********/
  68. main()
  69. {  
  70.    int y=0;
  71.    long k=0;
  72.    long mima=20130521;                                //初始化密码
  73.    while(1)                                                  
  74.   {
  75.       y=saomiao();              //扫描输入数字
  76.           if(y<=9)                                    //数字
  77.              {         
  78.                       k=k*10+y;
  79.                  }
  80.           if(y==15)                                        //输入=,确认密码
  81.              {
  82.                     if(k==mima)
  83.                                P1=0x00;                //密码正确灯就亮
  84.                       else
  85.                               {
  86. ……………………

  87. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
单片机密码锁简单c语言程序.doc (63 KB, 下载次数: 90)



作者: Andfigh    时间: 2018-6-23 10:17
感谢大神分享!这正是我需要的编程思路
作者: feiji666    时间: 2018-6-23 17:32
清楚明了!
作者: Ninsen    时间: 2018-7-31 16:10
感谢大神分享代码!
作者: 不都是我    时间: 2018-12-12 15:06

感谢大神分享代码!
作者: teamp    时间: 2018-12-14 11:57
我怎么实现不了?
作者: 2804834742    时间: 2021-1-1 08:42
怎么代码不全




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1