模拟电话键盘 单片机课程设计报告要点.docx

上传人:b****0 文档编号:17505142 上传时间:2023-07-26 格式:DOCX 页数:21 大小:311.06KB
下载 相关 举报
模拟电话键盘 单片机课程设计报告要点.docx_第1页
第1页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第2页
第2页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第3页
第3页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第4页
第4页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第5页
第5页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第6页
第6页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第7页
第7页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第8页
第8页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第9页
第9页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第10页
第10页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第11页
第11页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第12页
第12页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第13页
第13页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第14页
第14页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第15页
第15页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第16页
第16页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第17页
第17页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第18页
第18页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第19页
第19页 / 共21页
模拟电话键盘 单片机课程设计报告要点.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

模拟电话键盘 单片机课程设计报告要点.docx

《模拟电话键盘 单片机课程设计报告要点.docx》由会员分享,可在线阅读,更多相关《模拟电话键盘 单片机课程设计报告要点.docx(21页珍藏版)》请在冰点文库上搜索。

模拟电话键盘 单片机课程设计报告要点.docx

模拟电话键盘单片机课程设计报告要点

河海大学物联网工程学院

单片机课程设计报告

 

题目模拟电话键盘

专业、学号电信

授课班号275503

学生姓名

指导教师金纪东

完成时间2012/12/29

 

摘要

本设计为了实现电话键盘的拨号功能,根据所学的单片机知识首先通过编写C程序通过KeiLC进行调试,编译得到机器代码,调试成功后通过烧写工具进行功能测试,并通过串口调试程序验证串口发送和自动重发功能。

设计过程中,一开始程序功能有限,但通过不断的改进和查阅资料获得了所需的功能,其中行列式键盘的程序和串口程序都比较关键。

最终实现了按键拨号,数码管显示和自动重播等目标功能。

 

关键字:

行列式键盘,串口通信,数码管显示,自动重播,KeiLC

ABSTRACT

Inordertoachievethedesignoftelephonekeypaddialingfunction,accordingtostudysingle-chipknowledgefirstthroughwritingCprogramthroughtheKeiLCcompilerdebugging,getthemachinecode,debuggingsuccessbywritingtoolsforfunctionaltesting,andthroughtheserialdebuggingprogramverifyserialtransmissionandautomaticretransmissionfunction.Inthedesignprocess,firsttheprogramfeaturesalimited,butthroughcontinuousimprovementandaccesstoinformationtoobtainthedesiredfunction,whereinthedeterminantkeyboardproceduresandserialproceduresarethekey.Finallyrealizesthekeydialing,digitaltubedisplayandautomaticreplay,targetfunction.

KEYWORDS:

Determinantkeyboard,serialcommunication,digitaldisplay,automaticreplay,KeiLC

 

目录

1.系统设计---------------------------------------4

1.1模拟电话键盘设计的目的、要求和指标---------------------------4

1.2组要组件------------------------------------------------------4

1.3软件流程图-----------------------------------------------------7

2.实验结果及讨论---------------------------------8

2.1实际电路设计及程序设计----------------------------------------8

2.2设计过程中的问题---------------------------------------------8

2.3实验数据及讨论-----------------------------------------------8

3.结论------------------------------------------9

3.1课程设计的特点及贡献-----------------------------------------9

3.2评估结果----------------------------------------------------9

3.3改善建议----------------------------------------------------9

3.4自我体会----------------------------------------------------9

4.参考文献---------------------------------------10

5.附录-------------------------------------------11

 

1.系统设计

1.1模拟电话键盘设计的目的、要求和指标

把【S207、S206、S205;S217、S216、S215;S227、S226、S225;S237、S236、S235】;按键分别当作电话按键的123456789*0#。

当拨打电话时,电话号码显示在动态LED上(相当于手机的显示屏)。

当按下S204键Call电话时,电话号码通过串口发送到PC上,通过串口调试助手可以观察。

(相当于把号码发给基站)。

M-模拟电话不同时,每隔1分钟自动重拨一次。

1.2主要组件

C部分电路由4位一体的数码管LED1、单个数码管LED2和8个独立发光二极管L1-L7组成。

这3个部分都是共阴结构,并联在一起,连接在P0口上。

LED1用于完成LED动态显示实验,各个位选线为P24-P27,段码由P0口输出;LED2的COM端接地,完成LED静态显示实验;L1-L7,可以方便地读出P0输出的二进制数据,亦可做流水灯实验。

E部分电路为行列式键盘和独立式按键输入电路。

P20-P23为行,P24-P27为列,构成4×4行列式键盘。

按键编号规律为S2+行号+列号。

例如S226表示P22行和P26列跨接处的按键。

K20-K27构成独立式按键,分别接在P20-P27上,当按键按下时,对应的口线输入0,同时相应的LED点亮。

D20-D27构成P20-P27的状态指示,当某口线输出0,相应的LED点亮。

有4个用途:

1、当行列式键盘逐行扫描时,可做为正在被扫描的行的指示。

2、当行列式键盘逐行扫描时,可做为已按下键的指示。

G部分电路为串口通讯部分。

U5PL2303HX构成了USB转URAT电路,即完成USB口转TTL串口电平。

U6MAX232构成了RS232转URAT电路,即完成RS232串口转TTL串口电平。

由于单片机只有一个串口,所以以上两部分通过双刀双掷开关切换使用,当实验板上S-COM开关按下时选择USB转URAT电路。

否则选RS232转URAT电路。

这部分电路可以完成PC机跟单片机的串行通讯,也可以完成两个单片机进行串行通讯。

D_RXD和D_TXD指示收和发线上是否有信号,当通信时可观察到二灯闪烁。

当选择USB转URAT电路时,PC机的USB口同时承担给实验板供电的任务。

J部分为电源部分。

当USB供电不足时可通过J3接入后备电源。

SW_PWR为电源开关,闭合时电路板得电,同时D_P1亮。

F1为自恢复保险,防止电源反接和短路,保护PC机USB口。

 

1.3软件流程图

C程序实现了将按键对应的数字显示在数码管上,并给键S204赋予了串口通信发送功能,按键后,电脑上会显示已按数字。

若接收到重发标志,则重新发送。

 

2.实验结果及讨论

2.1实际电路设计及程序设计

实际电路就是将行列式矩阵键盘与数码管连接在一起,并将电源等必须部件都加入到整个电路中,并把串口通讯电路连入电路。

程序设计见附录。

2.2.设计过程中的问题

一开始只能按一个键显示一个数;

到后面只能显示最开始按的四位;

最后按键时数码管显示的数会消失。

2.3实验数据及讨论

通过不断的改进和调试,大多问题都得到解决。

实验数据见附录。

通过实验数据可以知道程序能始终保持数码管显示当前按的4位数,并最多按键20位,将之传送到电脑上,且能实现自动重发,目前尚无超过20位的电话号码,可以说基本实现了电话键盘的功能。

 

3.结论

3.1课程设计的特点及贡献

本次课程设计的工作量并不庞大,能让同学们在理论学习的基础上,在能力范围内,通过完成一个小功能系统的设计,不仅增强了同学们的动手能力,并在实践中加强了对单片机的理解,并且能够加深对电子电路和某些电子元件的认识,为今后能自己独立的进行一些系统的设计作出了贡献。

3.2评估结果

本次设计的基本功能已经实现了电话拨号的功能,最多可拨20位,并通过发送键通过串口传送到电脑上,且能实现重发。

3.3改善建议

1.可以对按键时的数码管显示问题进行改进,加一个中断程序可以实现。

2.可以将行列式键盘的剩余未用键赋值。

3.自动重发功能可以进行改进。

3.4自我体会

通过这次课程设计,我加深了对所学单片机知识的理解,并学会了KeiLC软件的使用,提高了自己的动手能力和编程能力。

 

4.参考文献

1.张友德、赵志英、涂时亮《单片微型机原理、应用于实验》,复旦大学出版社。

2.谭浩强《C语言程序设计》,清华大学出版社。

3.网络资源。

 

5.附录

1.实验程序

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharflag=0,TS;//flag为接受重播标志位TS为服务台发送的数据

ucharnum;

uchart,symbol=0;

uinti=0,j;

ucharsave[20]={0};

ucharcodeshow[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

sbitp1=P2^7;

sbitp2=P2^6;

sbitp3=P2^5;

sbitp4=P2^4;

uintshownum;

voiddelay(ucharx)

{ucharm,n;

for(m=5;m>0;m--)

for(n=x;n>0;n--);

}

voiddelay1(uintx)

{

uintm,n;

for(m=x;m>0;m--)

for(n=10;n>0;n--);

}

voiddelay2(uintx)//延时1ms

{

uintm,n;

for(m=x;m>0;m--)

for(n=110;n>0;n--);

}

voidsavenum(num)

{

ucharz;

for(z=20;z>0;z--)

{

save[z]=save[z-1];

}

save[0]=num;

i++;

}

voiddisplay(Q,B,S,G)

{

if(i==1)

{

P0=show[G];

p1=0;p2=1;p3=1;p4=1;//0为开启段选高为亮

delay(100);

}

if(i==2)

{

P0=show[G];

p1=0;p2=1;p3=1;p4=1;//0为开启段选高为亮

delay(100);

P0=show[S];

p1=1;p2=0;p3=1;p4=1;

delay(100);

}

if(i==3)

{

P0=show[G];

p1=0;p2=1;p3=1;p4=1;//0为开启段选高为亮

delay(100);

P0=show[S];

p1=1;p2=0;p3=1;p4=1;

delay(100);

P0=show[B];

p1=1;p2=1;p3=0;p4=1;

delay(100);

}

if(i==4)

{

P0=show[G];

p1=0;p2=1;p3=1;p4=1;//0为开启段选高为亮

delay(100);

P0=show[S];

p1=1;p2=0;p3=1;p4=1;

delay(100);

P0=show[B];

p1=1;p2=1;p3=0;p4=1;

delay(100);

P0=show[Q];

p1=1;p2=1;p3=1;p4=0;

delay(100);

}

if(i>4)

{

P0=show[G];

p1=0;p2=1;p3=1;p4=1;//0为开启段选高为亮

delay(100);

P0=show[S];

p1=1;p2=0;p3=1;p4=1;

delay(100);

P0=show[B];

p1=1;p2=1;p3=0;p4=1;

delay(100);

P0=show[Q];

p1=1;p2=1;p3=1;p4=0;

delay(100);

}

}

voidmain()

{

/*串口通信设置*/

EA=1;//开总开关

IT0=1;

EX0=1;

TMOD=0x20;//中断工作方式为0

TH1=0xFD;//波特率为9600用11.0592Mz晶振

TL1=0xFD;

TR1=1;//启动定时、计数器工作

SM0=0;//工作方式1(10位异步收发器)

SM1=1;//工作方式1(10位异步收发器

REN=1;//启动串口接收数据

ES=1;//关闭中断

PCON=0x00;//复位时

while

(1)

{

P2=0xfe;//将最低位(第一行)至零,11111110P3初始化

t=P2;//此处P3会随着按键变的

t=t&0xf0;//按位与,一旦有键按下,高四位肯定有一个被拉低为0;temp肯定不会等于0xf0了

//之所以要与一下,主要是使低四位全为0

if(t!

=0xf0)//说明第一行有键被按下,高四位有一个被至零了

{

delay1(3000);//去抖

switch(t)

{

case0x70:

num=1;savenum(num);break;//第一列的键盘被按下也就是第一行第一列被按下

case0xb0:

num=2;savenum(num);break;//第一行第二列

case0xd0:

num=3;savenum(num);break;//第一行第三列

case0xe0:

symbol=1;

break;

}

}

/*第二行扫描*/

P2=0xfd;//11111101

t=P2;

t=t&0xf0;

if(t!

=0xf0)

{

delay1(3000);

switch(t)

{

case0x70:

num=4;break;

case0xb0:

num=5;break;

case0xd0:

num=6;break;

}

savenum(num);

}

/*第三行扫描*/

P2=0Xfb;//11111011

t=P2;

t=t&0xf0;

if(t!

=0xf0)

{

delay1(3000);

switch(t)

{

case0x70:

num=7;break;

case0xb0:

num=8;break;

case0xd0:

num=9;break;

}

savenum(num);

}

/*第四行扫描*/

P2=0Xf7;//11110111

t=P2;

t=t&0xf0;

if(t!

=0xf0)

{

delay1(3000);

switch(t)

{

case0x70:

num=0;break;

case0xb0:

num=0;break;

case0xd0:

num=0;break;

}

savenum(num);

}

if(symbol==1)

{

symbol=0;

delay(2000);

ES=0;//关闭中断,不要进入中断,防止不断发送-接收

for(j=i-1;j>0;j--)

{

SBUF=save[j];//发送数据到计算机

while(!

TI);//等待发送完,发送过程中TI=0发送完之后TI=1

TI=0;

}

SBUF=save[0];

while(!

TI);

TI=0;

ES=1;

}

shownum=save[3]*1000+save[2]*100+save[1]*10+save[0];

display(shownum/1000,shownum%1000/100,shownum%100/10,shownum%10);

if(flag==1)//重播标志位

{

while

(1)

{

delay2(10000);//每隔10秒时间可调

flag=0;

ES=0;

for(j=i-1;j>0;j--)

{

SBUF=save[j];

while(!

TI);

TI=0;

}

SBUF=save[0];

while(!

TI);

TI=0;

ES=1;

}

}

}

}

voidserial()interrupt4//串口中断法

{

if(RI==1)//RI为1的时候才能接受

{

TS=SBUF;

if(TS==1)

flag=1;

RI=0;

}

}

2.实验记录

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2