历史上的今天
返回首页

历史上的今天

今天是:2024年12月30日(星期一)

正在发生

2020年12月30日 | 51单片机手机拨号模块

2020-12-30 来源:51hei

#include

#include


#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;

//毫秒级延时函数

void Delayms(unsigned int x)

{

  unsigned char i;

  while(x--)

  {

    for(i=0;i<120;i++);

  }

}

//显示字符串

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]);

  }

}

//检查1602是否处于忙装填

bit LCD_Busy_Check()

{

  bit Result;

  RS=0;

  RW=1;

  EN=1;

  Delaynop();

  Result=(bit)(P0 & 0x80);

  EN=0;

  return Result;

}

//向1602写入指令的函数

void LCD_Write_Command(unsigned char cmd)       

{

  while(LCD_Busy_Check());  //检查是否处于忙状态

  RS=0;                 

  RW=0;

  EN=0;

  _nop_();

  _nop_();

  P0=cmd;   //写入指令

  Delaynop();

  EN=1;

  Delaynop();

  EN=0;

}

//向1602写数据

void LCD_Wdat(unsigned char dat)

{

while(LCD_Busy_Check());  //检查是否处于忙状态

RS=1;

RW=0;

EN=0;

P0=dat;                   //写入数据

Delaynop();

EN=1;

Delaynop();

EN=0;

}

//初始化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);

}

//设置显示位置

void LCD_Pos(unsigned char pos)

{

  LCD_Write_Command(pos|0x80);

}

/*

//T0的中断服务子函数

void T0Deal()interrupt 1

{

TH0=-600/256;

TL0=-600%256;

if(++tCount==200)

{

  tCount=0;

  TR0=0;

}

}

*/

//按键扫描函数,返回值为对应的按键编码

unsigned char GetKey()

{

unsigned char i,j,k=0;

unsigned char KeyScanCode[]={0xef,0xdf,0xbf,0x7f};   //行列扫描的行列码

unsigned char KeyCodeTable[]={

0xee,0xed,0xeb,0xde,0xdd,0xdb,0xbe,0xbd,0xbb,0x7e,0x7d,0x7b};

P3=0x0f;

if(P3!=0x0f)       //如果有按键被按下

{

  for(i=0;i<4;i++)    //依次进行扫描

  {

    P3=KeyScanCode[i];

    for(j=0;j<3;j++)

    {

      k=i*3+j;                //计算对应的按键编码

      if(P3==KeyCodeTable[k])

      {

        return k;             //返回按键编码

      }

     }

  }

}

else

{

  return 0xff;                  //或者返回0xff

}

}

//主函数

void main()

{

unsigned char i=0,j;

P0 = 0xFF;

P2 = 0xFF;

P1 = 0xFF;                   //初始化端口

// IE=0x82;                     //设置中断

// TMOD=0x01;                   //启动T0定时器

Init_LCD();                  //初始化1602

Display_String(Title_Text,0x00); //显示 --Phone Code--

while(1)

{

  KeyNo = GetKey();           //获得按键状态

  if(KeyNo==0xff)

  {

    continue;                  //如果没有按键,则进入下一个循环

  }

  if(++i==12)                 //如果已经超过11个数字,清除显示屏幕

  {

    for(j=0;j<16;j++)

    Dial_Code_Str[j]=' ';

    i=0;

  }

  Dial_Code_Str[i]=Key_Table[KeyNo];  //显示拨号数据

  Display_String(Dial_Code_Str,0x40);

//  TR0=1;

  while(GetKey()!=0xff);

}

}


推荐阅读

史海拾趣

Herth+Buss Fahrzeugteile GmbH & Co KG公司的发展小趣事
在特定情况下(如宠物活动、热气流等),可能引发误报。
CLANDELL公司的发展小趣事

在电子产品市场日益同质化的背景下,CLANDELL公司意识到技术创新的重要性。公司投入大量资源研发新型电子元件,通过优化设计和材料选择,成功推出了具有更高性能、更低能耗的电子产品。这一创新不仅提升了CLANDELL公司的市场竞争力,也为整个行业带来了技术进步的推动力。

ENSIGN公司的发展小趣事

ENSIGN不仅关注传统电子行业的发展,还积极探索新的业务领域。最近,ENSIGN集团宣布收购位于亚利桑那州的医疗保健园区River Park Post Acute和Elmwood Senior Living,以及其他七家公司。这一收购标志着ENSIGN正逐步向医疗保健领域进军,寻求多元化的发展机会。

Fullywell Semiconductor Co Ltd公司的发展小趣事

面对市场需求的不断变化和技术的不断进步,Fullywell始终保持着对研发的重视和投入。在2020年,公司研发团队经过数年的努力,成功攻克了多项关键技术难题,推出了新一代的智能电源管理芯片。这款芯片在能效比、集成度和可靠性等方面均达到了行业领先水平,赢得了市场的广泛好评。Fullywell借此机会实现了产品的迭代升级,进一步巩固了其在电源管理芯片市场的领先地位。

Elytone Electronics Co Ltd公司的发展小趣事

进入XXXX年代,随着电子技术的飞速发展,Elytone公司意识到技术创新是企业持续发展的关键。公司投入大量资金引进先进设备和研发人才,成功开发出一系列具有竞争力的电子产品。这些产品在市场上获得了良好的口碑,为公司的快速发展奠定了坚实基础。

Excelight Communications Inc公司的发展小趣事

Excelight Communications Inc公司成立于XX世纪初,当时正值通信技术飞速发展的时代。创始人李明(化名)是一位电子工程专家,他对光通信技术有着浓厚的兴趣。在创办公司之前,李明曾在一家大型通信企业工作,积累了丰富的技术和管理经验。他发现市场上对于高速、高效的光通信产品有着巨大的需求,于是决定创立Excelight,专注于研发和生产光通信模块和设备。

创业初期,Excelight面临着资金、技术和市场等多方面的挑战。李明带领团队日夜兼程,不断攻克技术难关,同时积极寻找合作伙伴和投资人。经过几年的努力,Excelight逐渐在市场上崭露头角,其光通信产品因性能优越、价格合理而受到了客户的广泛好评。

问答坊 | AI 解惑

长期供应频谱分析仪HP8594E/8560A/8560E/8561E/8563E/8566B/8590L/8591C

一、 综合测试仪 R&S CMU200(可测GSM900/1800);Agilent8960 E5515B(可测GSM900/1800/1900/GPRS);Agilnet8960 E5515C(OPT:002、003,可测GSM、CDMA);R&S CMD55(可测900/1800);R&S CMD60(DECT测试仪);MT8801B(PHS测试仪); ...…

查看全部问答>

protel元件封装总结

零件封装是指实际零件焊接到电路板时所指示的外观和焊点的位置。是纯粹的空间概念.因此不同的元件可共用同一零件封装,同种元件也可有不同的零件封装。像电阻,有传统的针插式,这种元件体积较大,电路板必须钻孔才能安置元件,完成钻孔后,插入元 ...…

查看全部问答>

关于ATT7022B的编程问题

请问大家:现要通过cortex-M3内核处理器对ATT7022B进行操作,流程是什么样的??…

查看全部问答>

ce6 支持最大内存

我想问下ce6支持多大的物理内存? 在下面的链接中说是512MB,但我不是很明白他说的原因 麻烦各位帮帮忙 http://hi.baidu.com/even_xf/blog/item/cb7841b4b352a6758bd4b2ae.html…

查看全部问答>

RegEnumValue的问题!!!

LONG RegEnumValue(   HKEY hKey,   DWORD dwIndex,   LPWSTR lpValueName,   LPDWORD lpcchValueName,   LPDWORD lpReserved,   LPDWORD lpType,   LPBYTE ...…

查看全部问答>

BUSHound与虚拟串口的区别?

在调试虚拟串口的例子,用串口调试工具从PC发送64个字节数据时 STM收到了128个数据   但是用BUS Hound发送同样的64个数据  STM收到的是64字节,正常。     用串口调试工具发送一个文件,大小为2048&n ...…

查看全部问答>

MSP430实用C语言教程

MSP430系列单片机实用C语言教程…

查看全部问答>

lm3s6911的一些程序

本帖最后由 paulhyde 于 2014-9-15 09:35 编辑 自己lm3s6911的一些程序,开发工具为IAR,路劲为绝对路劲,工程打开需要自己更改。 希望对大家有所帮助。。。  …

查看全部问答>

【51征文】活动结果公布啦!

提及51,相信大家都有很多话说,所以文章个个都很出彩,为此,我们费了很大劲儿才做出了这个艰难的选择。   希望获奖的朋友继续加油,再创佳作;希望没获奖的朋友也别灰心,下次还有更多精彩的活动。   由于本人刚刚加入论坛没多久, ...…

查看全部问答>

【信号处理】基于FPGA的高动态范围图像信号处理

视频图像信号处理(ISP)从模拟信号时代发展而来,已经经历了很长一段时期。今天,数字信号处理实现了可以在位级进行图像数据处理,为图像质量提供了前所未有的控制。数字信号处理显然不等同于数字信号处理器或DSP.虽然DSP已经被广泛用于视频图像信 ...…

查看全部问答>