设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx

上传人:b****4 文档编号:3775040 上传时间:2023-05-06 格式:DOCX 页数:17 大小:241.79KB
下载 相关 举报
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第1页
第1页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第2页
第2页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第3页
第3页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第4页
第4页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第5页
第5页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第6页
第6页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第7页
第7页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第8页
第8页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第9页
第9页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第10页
第10页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第11页
第11页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第12页
第12页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第13页
第13页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第14页
第14页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第15页
第15页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第16页
第16页 / 共17页
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx

《设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx》由会员分享,可在线阅读,更多相关《设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx(17页珍藏版)》请在冰点文库上搜索。

设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx

设计键盘与显示课程设计采用8031单片机设计键盘与显示

目录

 

第一部分设计题目……………………………………………2

第二部分设计要求……………………………………………2

第三部分硬件设计……………………………………………2

1、硬件设计原理………………………………………………………2

2、硬件设计电路………………………………………………………2

第四部分软件设计……………………………………………3

1、软件设计思想………………………………………………………3

2、流程图……………………………………………………………4

3、源程序……………………………………………………………5

第五部分仿真功能……………………………………………13

第六部分收获与总结……………………………………………14

第七部分附录…………………………………………………14

 

一、设计题目

采用8031单片机设计键盘与显示。

二、设计要求

1.采用4位数码管显示通过键盘所按的数;

2.设计键盘与显示硬件电路要求键盘有12个按键(0~9),一个确认键,一个开关键;

3.编写软件,要求将按键数字显示在数码管上,具体格式:

按数字键n个,然后按确认键,显示刚才键入的数。

如果两次确认键之间按键数超过4位,则只显示按确认键最近的4位;如果两次确认键之间按键数少于4位,则显示实际按确位数;先按的键显示在高位。

开关键用于显示的开关,按一开显示,再按一次关显示;

4.详细叙说软件设计方法。

三、硬件设计

1、硬件设计原理

(1)

的矩阵键盘,第1行与89C51的P3.0口相连,第2行与89C51的P3.1口相连,第3行与89C51的P3.2口相连;第1列与89C51的P3.4口相连,第2列与89C51的P3.5口相连,第3列与89C51的P3.6口相连,第4列与89C51的P3.7口相连。

用来检测哪个按键被按下。

(2)4个数码显示管,由89C51的P0口通过两个74HC573芯片控制显示,其中P2.6通过控制一个573来控制段码输入(段选),P2.7控制另一个573从而控制位码的输入(位选)。

2、硬件电路图

(1)独立矩阵键盘与8031单片机P3口的连接图:

图1

(2)P0口控制数码管显示电路:

图2

(3)模拟仿真电路图:

图3

四、软件设计

1、设计思想

本题可分为两部分,一部分为键盘扫描,另一部分为显示,并且选定第三行第三列为“确定键”,第三行第四列为“显示键”。

为了方便录入数据和显示,采用两个数组,一个作为接收数组,用来接收按键值,一个作为显示数组,作为动态扫描显示。

采用赋值、读值的方法确定是否存在按键输入,若有按键输入,则依次按键位顺序赋给接收数组高位0到9中的值(即按键值),每次有按键输入时数组左移,以保证每次数组中保留的都是最近的四个输入值。

设置变量作为判定显示开关的依据,显示开时,将接收数组中的值赋给显示数组,用动态扫描的办法使数码管显示录入值。

2、流程图

否否

是是

 

3、源程序(含注释)

#include

#defineint8unsignedchar

#defineint16unsignedint

 

sbitdula=P2^6;//读段码,申明U1锁存器的锁存端

sbitwela=P2^7;//读位码,申明U2锁存器的锁存端

//段码

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

0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

int8pre_array[4]={0x0a,0x0a,0x0a,0x0a};//接收按键数组

int8hold_array[]={0x0a,0x0a,0x0a,0x0a};//显示数组

int8a=0,temp;//a控制显示与否即显示键,n与key确定

int8key=0xff;//key初始值

//延时程序

voiddelay(unsignedintx)

{

unsignedchart;

while(x--)

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

}

voidmain()

{

intm;

while

(1)

{

//扫描第一行是否有按键输入,若有则temp&0xf0!

=0xf0,而后进入switch语句

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);//延时去抖操作

if(temp!

=0xf0)//确定是否有输入

{

temp=P3;

switch(temp)

{

case0xee:

//第一行第一列

key=0;

break;

case0xde:

//第一行第二列

key=1;

break;

case0xbe:

//第一行第三列

key=2;

break;

case0x7e:

key=3;

break;

}

while(temp!

=0xf0)//等待按键释放

{

temp=P3;

temp=temp&0xf0;

}

//把最近的键盘输入值存入接收数组,保留最近四位

pre_array[0]=pre_array[1];

pre_array[1]=pre_array[2];

pre_array[2]=pre_array[3];

pre_array[3]=key;

}

}

//扫描第二行是否有按键输入

P3=0xfd;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(20);

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xed:

key=4;

break;

case0xdd:

key=5;

break;

case0xbd:

key=6;

break;

case0x7d:

key=7;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

pre_array[0]=pre_array[1];

pre_array[1]=pre_array[2];

pre_array[2]=pre_array[3];

pre_array[3]=key;

}

}

//扫描第三行是否有按键输入

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xeb:

key=8;

break;

case0xdb:

key=9;

break;

case0xbb:

//确定键(此时按键为第3行第3列)

//由按键存储数组到显示输出数组

hold_array[0]=pre_array[0];

hold_array[1]=pre_array[1];

hold_array[2]=pre_array[2];

hold_array[3]=pre_array[3];

//初始化

for(m=0;m<4;m++)

{pre_array[m]=10;}//按键接受数组准备下一轮的接收

break;

case0x7b:

//显示键a(此时按键为第3行第4列)

a=~a;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

if(key==8||key==9)

{

pre_array[0]=pre_array[1];

pre_array[1]=pre_array[2];

pre_array[2]=pre_array[3];

pre_array[3]=key;

}

}

}

//显示

if(a)//显示键a为1输出,为0黑屏

{

//动态扫描法输出

dula=0;

P0=seg_code[hold_array[0]];

dula=1;

dula=0;

wela=0;

P0=0xfe;//选中第一位数码管

wela=1;

wela=0;

delay(3);

 

dula=0;

P0=seg_code[hold_array[1]];

dula=1;

dula=0;

wela=0;

P0=0xfd;

wela=1;

wela=0;

delay(3);

dula=0;

P0=seg_code[hold_array[2]];

dula=1;

dula=0;

wela=0;

P0=0xfb;

wela=1;

wela=0;

delay(3);

dula=0;

P0=seg_code[hold_array[3]];

dula=1;

dula=0;

wela=0;

P0=0xf7;

wela=1;

wela=0;

delay(3);

}

else//显示键a为0,输出黑屏

{

dula=0;

P0=seg_code[10];//0x00

dula=1;

dula=0;

wela=0;

P0=0xf0;

wela=1;

wela=0;

delay(3);

}

}

}

 

五、功能仿真

 

 

当按键的数目为n(n<4)时,数码管显示所按键的数字;当按键n>=4时,显示的是最近按下的四个。

 

六、收获与总结

通过本次课设,使我学会了PROTEUS软件和KEIL C软件的基本使用。

使我能够综合运用《微型计算机技术》、《C语言程序设计》以及《数字电路》、《模拟电路》等课程中学到的知识做一些简单的电子产品的仿真,使我对C语言有了更好的掌握和运用,用其进行软件编程更加顺手。

初步掌握了KEIL C和PROTEUS等软件,可以用C语言或汇编语言编写一个较完整的实用程序。

 

本次课设使我初步了解了单片机接口应用开发的全过程:

分析需求、设计原理图、选用元器件、布线、编程、调试等。

 

更重要的是,使我明白了无论是设计硬件电路还是编写相应的软件程序,我们应该时刻都要仔细认真。

因为在这个过程中哪怕是出现一个小小的错误,都会导致不能仿真出正确的结果甚至根本不会出结果。

 

课程设计的过程是一个不断学习的过程,我们需要充分利用好网络资源来解决我们在课设过程中遇到的问题,只有将遇到的问题解决好,才能真正的学到一些知识。

 

七、附录

元件清单:

器件规格数量

电阻2201

电阻10k2

电容22pF2

电容10uF2

STC89C52RC1

晶振11.0592MHz1

数码管共阴极4

4X4矩阵键盘1

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

当前位置:首页 > 解决方案 > 学习计划

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

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