栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

51单片机lcd1602实验(单片机的模拟电话拨号)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

51单片机lcd1602实验(单片机的模拟电话拨号)

这个程序比较简单主要就是实现矩阵键盘扫描,并在lcd1602上显示具体功能如下

(1)系统运行时将所按下的键盘显示在液晶屏上;

(2)电话号码键盘上的DELETE键能实现退格功能;

(3)电话号码键盘上的CLEAR键能实现清屏功能;

(4)每按下一个键盘能够发出声音;

(5)在LCD屏的第一行显示成员名字。

本系统包括单片机晶振复位电路和显示电路矩阵键盘和扬声器模块组成。其中显示,是由LCD 1602来做显示屏;矩阵键盘是4*3作为输入由单片机将输入的信号处理,然后在LCD屏上显示出来。

3 软件设计

void lcd_init() 

{

   lcd_write(0x38); 

   lcd_write(0x0c);  

   lcd_write(0x06);  

   lcd_write(0x01); 

}

void lcd_write(uchar x)  //写命令

{

  lcd_busy();

  e=0; rs=0; rw=0;

  e=1; P0=x;

  e=0;

  lcd_delay();

}

void lcd_busy()    //判断LCD是否忙

{

  P0=0xff;

  rs=0;  rw=1;

  e=1;   e=0;

  while(P0&0x80)

  {

     e=0;e=1;

  }

  lcd_delay();

}

 键盘扫描模块

uchar checkkey()    //检测有无按键按下

{

  uchar temp;

  P1=0xf0;

  temp=P1;

  temp=temp&0xf0;

  if(temp==0xf0)

  {return(0);}

  else {return(1);}

}

uchar keyscan()   //键盘扫描函数

{

  uchar hang,lie,keyvalue,buff;

  if(checkkey()==0)//无按键按下

  {return(0xff);}

  else //有则扬声器发声

  {

   uchar sound;

  for(sound=50;sound>0;sound--)

  {

    speaker=0;

    delay(1);

    speaker=1;

    delay(1);

  }

  P1=0x0f;//看哪一行按下

  buff=P1;

  if(buff==0x0e)

  {hang=0;}

  else if(buff==0x0d)

  {hang=3;}

  else if(buff==0x0b)

  {hang=6;}

  else if(buff==0x07)

  {hang=9;}

  P1=0xf0;//看那一列按下

  buff=P1;

  if(buff==0xe0)

  {lie=2;}

  else if(buff==0xd0)

  {lie=1;}

  else if(buff==0xb0)

  {lie=0;}

  keyvalue=hang+lie;

  while(P1!=0xf0);

  return(keyvalue);

  }

}

3.3 主函数模块

主函数先调用初始化子函数实现初始化,然后显示第一行我们小组的个人信息,用一个while循环调用键盘扫描函数并将结果处理传递给显示屏,即将数字显示出来,并实现删除和清屏的功能,

void main()   //主函数

{

  uchar a;

  lcd_init();       //调用初始化函数

  for(a=0;a<6;a++)

  {

     lcd_data(designer[a]);//显示第一行信息

  }

  while(1)

  {

     num=keyscan();//调用键盘扫描函数

       if((num>=0)&&(num<=9))

       {

         lcd_write(DDram_value);

         lcd_data(table[num]);

         DDram_value++;

       }

       else if(num==10)

       {

         DDram_value--;

         if(DDram_value<=0xc0)

         {DDram_value=0xc0;}

         else if(DDram_value>=0xcf)

         {DDram_value=0xcf;}

        

         lcd_write(DDram_value);

         lcd_data(0x20);//实现清除用空格

       }

       else if(num==11)

       {

         uchar p,q;

         q=0xc0;

         for(p=0;p<=15;p++)

         {

            lcd_write(q);

              lcd_data(0x20);

              q++;

         }

         DDram_value=0xc0;

       }        

  }

}

仿真图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/932274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号