设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx
- 文档编号:10128010
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:17
- 大小:241.79KB
设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx
《设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx》由会员分享,可在线阅读,更多相关《设计键盘与显示课程设计采用8031单片机设计键盘与显示.docx(17页珍藏版)》请在冰豆网上搜索。
设计键盘与显示课程设计采用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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 键盘 显示 课程设计 采用 8031 单片机