找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1114|回复: 0
打印 上一主题 下一主题
收起左侧

矩阵键盘模拟洗衣机 stc89c52

[复制链接]
跳转到指定楼层
楼主
ID:812531 发表于 2021-1-19 18:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>

typedef unsigned char uchar;
typedef unsigned int uint;
sbit key1=P3^5;
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P2^5;
sbit led=P1^5;
sbit led1=P1^6;
sbit led2=P1^4;
unsigned char KeyPro();
unsigned char num1,c,e;
unsigned char d=6;
unsigned char time,clock;
unsigned char temp,num;//???????
bit flag=0;
      unsigned char num,a,b,d,e;
unsigned char i;
void delayms(unsigned int xms)
{
   unsigned i,j;
        for(i=xms;i>0;i--)
           for(j=110;j>0;j--);
}

void Read_Busy()
{
        uchar busy;
        P0 = 0xff;
        RS = 0;
        RW = 1;
        do
        {
                EN = 1;
                busy = P0;
                EN = 0;
        }while(busy & 0x80);
}
//?LCD1602??????
void Write_Cmd(uchar cmd)
{
        Read_Busy();//???
        RS = 0;
        RW = 0;
        P0 = cmd;
        EN = 1;
        EN = 0;
}
//???????
void Write_Dat(uchar dat)
{
        Read_Busy();
        RS = 1;
        RW = 0;
        P0 = dat;
        EN = 1;
        EN = 0;
}
void charter(unsigned char x,unsigned char y,unsigned char dat)
{
if(y==0)
{
Write_Cmd(0x80+x);
}
else
{
Write_Cmd(0xc0+x);

}
Write_Dat( dat);  
}
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{     
if (y == 0)
        {     
Write_Cmd(0x80 + x);     
        }
else
        {     
Write_Cmd(0xC0 + x);     
        }        
while (*s)
        {     
Write_Dat( *s);     
s ++;     
        }
}
void lcdinit()
{
   Write_Cmd(0x38);  
   Write_Cmd(0x08);    /*????*/
   Write_Cmd(0x01);    /*????*/
   Write_Cmd(0x06);    /*????????*/
   Write_Cmd(0x0C);    /*????????*/
}
void Timer0Init(void)                //50??@11.0592MHz
{
        TMOD = 0x01;                //???????
        TL0 = 0x00;                //??????
        TH0 = 0x4C;                //??????
                ET0=1;
        EA=1;
        TR0 = 0;                //???0????


}

void main()
{

lcdinit();
Timer0Init();
        LCD_Write_String(4,0,"welcome");
LCD_Write_String(0,1,"count:");

while(1)
{
KeyPro();
        a=num1/10;
        b=num1%10;
charter(6,1,'0'+a);
charter(7,1,'0'+b);

       
if(flag==1)
{

        led1=~led1;
num1--;       
                        d=num1/10;
        e=num1%10;
charter(6,1,'0'+a);
charter(7,1,'0'+b);

flag=0;
        if(num1==0)
        {
        TR0=0;
        }
}

}


}



unsigned char KeyScan(void)  //??????,?????????
{
unsigned char temp,num;//???????
P3=0x0f;            //??????0
temp=P3&0x0f;     //?????
if(temp!=0x0f)    //?????????
{
  delayms(10);        //??
  if((P3&0x0f)!=0x0f)
  {
   temp=P3&0x0f;  //?????
    P3=temp|0xf0;  //???????
    num=P3&0xf0;  //?????

    while((P3&0xf0)!=0xf0);//???????

    return(temp+num);//????????
   }
  }     //????
}

unsigned char KeyPro(void)
{
switch(KeyScan())
{
       
  case 0x7e:TR0=1;break;//0 ??????????????
  case 0x7d:num1=10;break;//1
  case 0x7b:num1=15;break;//2
  case 0x77:num1=20;break;//3
  case 0xbe:num1++;break;//4
  case 0xbd:num1--;break;//5
  case 0xbb:d=6;break;//6
  case 0xb7:d=7;break;//7
  case 0xde:d=8;break;//8
  case 0xdd:num1=9;break;//9

  default:return 0xff;break;
}

}
void timer() interrupt 1
{
TL0 = 0x00;                //??????
        TH0 = 0x4C;                //??????       
        time++;
        if(time==20)
        {
        flag=1;
                led=~led;
                time=0;
        }


}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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