找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7690|回复: 6
收起左侧

单片机密码锁简单c语言程序的课堂作业

[复制链接]
ID:240539 发表于 2017-10-30 19:25 | 显示全部楼层 |阅读模式
以下程序是本人为课堂作业所写,基本完整作业要求,当然也存在好些问题,如不能从0开始输入。
  作为一个单片机技术入门级学生将此程序上传,希望能交到爱好电子技术的朋友,互相学习。
0.png
(P0脚用在显示某数字,P2脚控制某位,P3脚控制识别按键)
0.png 0.png

单片机源程序如下:
  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)
回复

使用道具 举报

ID:313666 发表于 2018-6-23 10:17 | 显示全部楼层
感谢大神分享!这正是我需要的编程思路
回复

使用道具 举报

ID:313328 发表于 2018-6-23 17:32 | 显示全部楼层
清楚明了!
回复

使用道具 举报

ID:381334 发表于 2018-7-31 16:10 | 显示全部楼层
感谢大神分享代码!
回复

使用道具 举报

ID:444891 发表于 2018-12-12 15:06 | 显示全部楼层

感谢大神分享代码!
回复

使用道具 举报

ID:440751 发表于 2018-12-14 11:57 来自手机 | 显示全部楼层
我怎么实现不了?
回复

使用道具 举报

ID:871714 发表于 2021-1-1 08:42 来自手机 | 显示全部楼层
怎么代码不全
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表