您的位置 首页 五金品牌

51case

51case *程序名称:电话拨号模拟(液晶显示)≠ *创建人:ju?mpmysoul*?完成日?期?:200…

51case

*程序名称:电话拨号模拟(液晶显示)≠

*创建人:ju?mpmysoul
*?完成日?期?:2009.0?6.06
*版本:V1.0
*功?能说明:按下电话键盘上的一个按键,在液晶显示屏上相?应=的显示 ?出按下的
按键对应的字符,按下DEL键,则°删除一个字符 (不足之处:在删除所有的字符后
?光标≮㏄不见了,如果继续删除几次,再输入的≤时候就要多按几次按键)

本文引用地址:http:?//www.?¢eepw.com?.?cn/article/201611/322?1∟54.ht?m

#inclu℡de
#defi?ne uc£ha?r un㎜simolgned cha?r
#defin?e ?uint unsigned int
#define ◎LCDPORT P0
#define* KEYP1
//#define WEIP2

sbit? ?DEL=P3^0;
sbit? LCDE=P>3^5;
sbit? LCDRW=P3?^6;
sbit LCD∠RS=P3^7;

uchar cod∝e NUM[12]=”0123℉45‰6789*#”?;

uchar addr=0;

void WriteCMD(ucha?r);
?v⊕oidm init≈();
void WriteDa∮t?⊙a(uchar);
void Delete();

vo?id Delay_ms(uint);
uch-ar KeyScan();
∣void ma?in()
{
init();
whil№e″(1)%
?∷{
?if(Ke?yScan?()!=20)//判断电话按键是否按下
{
﹢addr++;//地址变量加1
W?riteData(N±UM[Ke∴yS㎎can()]);·?//在液晶上显示按下的键值
Delay<_ms(10?0)℃;//延时,作用是只显示一个字符,?如果没有延时,则会显示℅?一串字符
}

if(D﹥EL?==0)//判㏒断≌DEL按键?是否按下
{
?De㎡lay_ms(﹢10);
if(DE??L==0)
mwhile(DEL==0);
??Delay_?ms(10);
whil♂e(DEL==0);
De?lete();
}
}

}
uchar KeyScan?()
{51case
uchar temp=20;
KEY=0xef;?//扫描第1列键
switch(KEY)
{
case 0xee:t≦emp=1§;bre?ak?;
case 0xed:te?mp=4;break;
case 0xeb:temp=7;b?reak;
c?ase 0xe?7∥:?temp=10;break;
d√efault?:bre?ak;
3}
KEY﹣=0x?df;//扫描第2列键
?swi∩tch≒(KEY)ml
{
?case 0xde:?temp=2;break?;
case 0xdd:temp=£5;break;‖
case 0x×db:temp=8;break;
?ca?se 0xd7:t∷emp=0;brea∑k;
default:break;
}
KEY=0xbf;1//扫描第3列㏕键
swi?tch(KEY)
{
*case 0xbe:temp=3;break;㎏
case 0xbd:temp=6;break;
case 0xbb:temp=9;break;
case 0?xb7:temp=11?;break;
d∽efault:break;
}%
return?(temp);//﹣返?回?按键键值
}
v?oid Delay_ms(uint x)
{
?u㈱in?t i≡,j;
?for(i=x;i>0;i–¤)
for(j=?120;j>0;j?–);
}
vo×id WriteCMD(uchar? Command)/
{
Delay_m⌒s(10);//先※延时。

LCDE=1;?//然后把LCD改为写入命令状?态。
?LCDRS=0;
LCDRW?=0?;

LCDPORT=Co¬mmand;?/μ/再输出命?令。?

′㎞

LCD@E=0;?//最后执行命令。3
∞}
void WrioteData(uchar dat)
{
Delay÷_ms(10⊥);//先延时?。

LCDE=1?;//然后把LCD改为写入数据状态。
LCDRS=1;
LCDRW=0;

LCDPORT?=dat㏑;//再输出数据。?

LCDE=0;//最后显示?数据。
}
void init()
{
㎝LCDRW=0;
L∏CD?E=0;
Wr=iteCMD(0x38);
WriteCMD(0x?0f);
Wri?teCMD(0?x06);
Write≯CMD(0x01);
?WriteCMD(0x80);
}
vo∪id ?Dele2te()
{
if( (a?ddr∫–)>0)
{
?Write?CMD(0x04);?/?/读写一$个字符后地址指针减1,?光标?左移
WriteD⊿ata( );﹤
}
WriteCMD(0x06);?//读写一个字符后≧地址指针加1≥,光标右移

}

关于更多51case内容,可以收藏本网页。孙勇征 51单片机C编程(十一、电话拨号模拟液晶显示)

51case51case
本文来自网络,不代表天津五金网立场,转载请注明出处:http://www.mgnqyz.com/mgnqyz/1270.html

作者: mgnqyz

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部