历史上的今天
今天是: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); } }
史海拾趣
|
长期供应频谱分析仪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测试仪); ...… 查看全部问答> |
|
零件封装是指实际零件焊接到电路板时所指示的外观和焊点的位置。是纯粹的空间概念.因此不同的元件可共用同一零件封装,同种元件也可有不同的零件封装。像电阻,有传统的针插式,这种元件体积较大,电路板必须钻孔才能安置元件,完成钻孔后,插入元 ...… 查看全部问答> |
|
我想问下ce6支持多大的物理内存? 在下面的链接中说是512MB,但我不是很明白他说的原因 麻烦各位帮帮忙 http://hi.baidu.com/even_xf/blog/item/cb7841b4b352a6758bd4b2ae.html… 查看全部问答> |
|
LONG RegEnumValue( HKEY hKey, DWORD dwIndex, LPWSTR lpValueName, LPDWORD lpcchValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE ...… 查看全部问答> |
|
在调试虚拟串口的例子,用串口调试工具从PC发送64个字节数据时 STM收到了128个数据 但是用BUS Hound发送同样的64个数据 STM收到的是64字节,正常。 用串口调试工具发送一个文件,大小为2048&n ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:35 编辑 自己lm3s6911的一些程序,开发工具为IAR,路劲为绝对路劲,工程打开需要自己更改。 希望对大家有所帮助。。。 … 查看全部问答> |
|
提及51,相信大家都有很多话说,所以文章个个都很出彩,为此,我们费了很大劲儿才做出了这个艰难的选择。 希望获奖的朋友继续加油,再创佳作;希望没获奖的朋友也别灰心,下次还有更多精彩的活动。 由于本人刚刚加入论坛没多久, ...… 查看全部问答> |
|
视频图像信号处理(ISP)从模拟信号时代发展而来,已经经历了很长一段时期。今天,数字信号处理实现了可以在位级进行图像数据处理,为图像质量提供了前所未有的控制。数字信号处理显然不等同于数字信号处理器或DSP.虽然DSP已经被广泛用于视频图像信 ...… 查看全部问答> |




