模拟电话键盘 单片机课程设计报告要点.docx
- 文档编号:29695141
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:21
- 大小:311.06KB
模拟电话键盘 单片机课程设计报告要点.docx
《模拟电话键盘 单片机课程设计报告要点.docx》由会员分享,可在线阅读,更多相关《模拟电话键盘 单片机课程设计报告要点.docx(21页珍藏版)》请在冰豆网上搜索。
模拟电话键盘单片机课程设计报告要点
河海大学物联网工程学院
单片机课程设计报告
题目模拟电话键盘
专业、学号电信
授课班号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.实验记录
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟电话键盘 单片机课程设计报告要点 模拟 电话 键盘 单片机 课程设计 报告 要点