微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助,有单片机程序不会画仿真,急求

求助,有单片机程序不会画仿真,急求

时间:10-02 整理:3721RD 点击:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;
uchar passw[8]={0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde};
uchar keyw[8]; //按键
uchar disp[8]; //按键显示代码
unsigned        char        const seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,                                0x77,0x7c,0x39,0x5e,0x79,0x71};//0-f显示代码
unsigned        char        const keyd[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,                                0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//0-F 按键代码
bit f;//f为开、闭锁标志,
uchar m,n,j,x,d,key,del,t,k;
uchar keyscan();
void delay(uint i);
void main()/*主函数 */
{     t=3;
       f=0;
       m=8;    //按键次数
       while(1)
     {     if(t==0)continue;
                             key=keyscan();
              if(key!=0xff)   //有按键按下,保存按键代码
              {   
                     for(j=0;j<15;j++)
                     {
                            if(key==keyd[j])
                            {
                                   disp[m-1]=seg[j];    //显代码
                                   keyw[m-1]=keyd[j];   //按代码
                            }
                     }
                     m--;        
                     if(m==0)
                     {
                            m=8;
                     }   
              }
              if(key==0x77)    //确认键按下,判断密码是否正确
                {
                     for(n=0;n<8;n++) disp[n]=0;//清显示
                     m=8;                                      
                     for(d=0;d<8;d++)
                            if(keyw[d]!=passw[d]) f=1; //判断密码
                     if(f==1)    //密码错,闭锁
                     {   
                            led=1;
                            f=0;
                                                t=t-1;
                     }
                     else led=0;      //密码正确,开锁
              }  
                      for(x=0;x<8;x++) //按键显示
                             {
                                 P2=x;         
                                    P0=disp[x];         
                                    delay(10);
                                     }
     }
}
uchar keyscan()//键盘扫描函数,使用行列反转扫描
{
       uchar cord_h,cord_l;//行列值
       P3=0x0f;            //列线输出全为0,扫描行
       cord_h=P3&0x0f;     //读入行线值
       if(cord_h!=0x0f)   //先检测有无按键按下
       {
              delay(100);        //去抖
              if(cord_h!=0x0f)
              {
                     led=1;           //有按键按下闭锁
                     cord_h=P3&0x0f; //读入行线值
                     P3=0xf0;         //行线输出全为0,扫描列
                     cord_l=P3&0xf0; //读入列线值
                     do               //等待键释放
                     {
                            P3=0x0f;
                            for(x=0;x<8;x++) //按键显示,延时
                         {
                                P2=x;  
                                   P0=disp[x];         
                                  delay(10);
                            }
                            del=P3;
                     }while(del!=0x0f);
                     return(cord_h+cord_l);//返回键盘最后组合码
              }
       }
       return(0xff);     //返回该值
}
void delay(uint i)//延时函数
{
while(i--);
}


大神们,应该怎么画,这个是关于单片机密码锁的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top