OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5365|回复: 2

基于51单片机的手机拨号模块protues仿真

[复制链接]

1

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2020-3-9
在线时间
4 小时
发表于 2020-3-23 08:59:29 | 显示全部楼层 |阅读模式
函数源代码
#include<AT89X52.h>
#include <intrins.h>

#define Delaynop(){_nop_();_nop_();_nop_();_nop_();}


sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;

void Delayms(unsigned int ms);
bit LCD_Busy();
void LCD_Pos(unsigned char);
void LCD_Wcmd(unsigned char);
void LCD_Wdat(unsigned char);

char code Title_Text[]={"--Phone Code--  "};

unsigned char code Key_Table[]={'1','2','3','4','5','6','7','8','9','*','0','#'};
unsigned char Dial_Code_Str[]={"             "};
unsigned char KeyNo=0xff;
int tCount=0;
//oá&#195;&#235;&#188;&#182;&#209;óê±oˉêy
void Delayms(unsigned int x)
{
  unsigned char i;
  while(x--)
  {
    for(i=0;i<120;i++);
  }
}
//&#207;&#212;ê&#190;×&#214;·&#251;′&#174;
void Display_String(unsigned char *str,unsigned char LineNo)
{
  unsigned char k;
  LCD_Pos(LineNo);
  for(k=0;k<16;k++)
  {
    LCD_Wdat(str[k]);
  }
}
//&#188;ì2é1602ê&#199;·&#241;′|óú&#195;|×°ì&#238;
bit LCD_Busy_Check()
{
  bit Result;
  RS=0;
  RW=1;
  EN=1;
  Delaynop();
  Result=(bit)(P0 & 0x80);
  EN=0;
  return Result;
}
//&#207;ò1602D′è&#235;&#214;&#184;á&#238;μ&#196;oˉêy
void LCD_Write_Command(unsigned char cmd)       
{
  while(LCD_Busy_Check());  //&#188;ì2éê&#199;·&#241;′|óú&#195;|×′ì&#172;
  RS=0;                 
  RW=0;
  EN=0;
  _nop_();
  _nop_();
  P0=cmd;   //D′è&#235;&#214;&#184;á&#238;
  Delaynop();
  EN=1;
  Delaynop();
  EN=0;
}
//&#207;ò1602D′êy&#190;Y
void LCD_Wdat(unsigned char dat)
{
while(LCD_Busy_Check());  //&#188;ì2éê&#199;·&#241;′|óú&#195;|×′ì&#172;
RS=1;
RW=0;
EN=0;
P0=dat;                   //D′è&#235;êy&#190;Y
Delaynop();
EN=1;
Delaynop();
EN=0;
}
//3&#245;ê&#188;&#187;ˉ1602
void Init_LCD()
{
  LCD_Write_Command(0x38);Delayms(5);
  LCD_Write_Command(0x01);Delayms(5);
  LCD_Write_Command(0x06);Delayms(5);
  LCD_Write_Command(0x0c);Delayms(5);
}
//éè&#214;&#195;&#207;&#212;ê&#190;&#206;&#187;&#214;&#195;
void LCD_Pos(unsigned char pos)
{
  LCD_Write_Command(pos|0x80);
}
/*
//T0μ&#196;&#214;D&#182;&#207;·t&#206;&#241;×óoˉêy
void T0Deal()interrupt 1
{
TH0=-600/256;
TL0=-600%256;
if(++tCount==200)
{
  tCount=0;
  TR0=0;
}
}
*/
//°′&#188;üé¨&#195;èoˉêy£&#172;·μ&#187;&#216;&#214;μ&#206;a&#182;&#212;ó|μ&#196;°′&#188;ü±à&#194;&#235;
unsigned char GetKey()
{
unsigned char i,j,k=0;
unsigned char KeyScanCode[]={0xef,0xdf,0xbf,0x7f};   //DDáDé¨&#195;èμ&#196;DDáD&#194;&#235;
unsigned char KeyCodeTable[]={
0xee,0xed,0xeb,0xde,0xdd,0xdb,0xbe,0xbd,0xbb,0x7e,0x7d,0x7b};
P3=0x0f;
if(P3!=0x0f)       //è&#231;1&#251;óD°′&#188;ü±&#187;°′&#207;&#194;
{
  for(i=0;i<4;i++)    //òà′&#206;&#189;&#248;DDé¨&#195;è
  {
    P3=KeyScanCode[i];
    for(j=0;j<3;j++)
    {
      k=i*3+j;                //&#188;&#198;&#203;&#227;&#182;&#212;ó|μ&#196;°′&#188;ü±à&#194;&#235;
      if(P3==KeyCodeTable[k])
      {
        return k;             //·μ&#187;&#216;°′&#188;ü±à&#194;&#235;
      }
     }
  }
}
else
{
  return 0xff;                  //&#187;ò&#213;&#223;·μ&#187;&#216;0xff
}
}


QQ截图20200323085817.png

新建文件夹.zip

87.5 KB, 下载次数: 18

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3583
金钱
3583
注册时间
2019-8-14
在线时间
1052 小时
发表于 2020-3-23 16:18:40 | 显示全部楼层
回复 支持 反对

使用道具 举报

34

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
857
金钱
857
注册时间
2018-9-16
在线时间
240 小时
发表于 2021-9-22 23:28:32 | 显示全部楼层
运行不了,会报错
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 02:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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