单片机课程设计2.docx
《单片机课程设计2.docx》由会员分享,可在线阅读,更多相关《单片机课程设计2.docx(10页珍藏版)》请在冰豆网上搜索。
单片机课程设计2
中北大学信息商务学院
课程设计任务书
11/12学年第二学期
系别:
信息与通信工程
专业:
自动化
学生姓名:
刘波学号:
09050542X45
课程设计题目:
矩阵键盘控制七段数码管显示
十六进制数
起迄日期:
6月11日~6月17日
指导教师:
刘长明
系主任:
王明泉
下达任务书日期:
2012年6月11日
课程设计任务书
1.设计目的:
设计一个根据单片机及接口技术课程中所学的知识,熟练AT89C51单片及的性能和编程原理,设计一个简单的硬件电路,画出电路图,编写控制程序,进一步提高综合运用知识的能力。
2.设计内容和要求
●矩阵键盘控制七段数码管显示十六进制数:
一片单片机,16个按键,一个7段数码管,其他元件若干。
4*4的矩阵键盘,每一个键对应一个十六进制数字0~F,当按下其中一个按键后在数码管上显示相应的数字。
●8*8LED灯点阵显示:
一片单片机,一个8*8LED点阵模块(或64个发光二极管),其他元件若干。
在8*8 LED(发光二极管)点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。
●两位跑马表设计:
一片单片机,两个7段数码管,一个按键,其他元件若干。
开始数码管显示“00”,当按下按键1次开始计时,按下按键2次停止计时,按下按键3次清零。
●双机串口通信:
两片单片机,两个串口9针D型插头,两片MAX232芯片,发光二极管8个,其他元件若干。
两个单片机通过串口进行数据传输,一个发送8位二进制数,一个接收,当接收端接收到相应的数据,通过8个发光二极管的亮灭显示其接收数值。
以上题目任选一个做。
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:
(1)查阅资料,确定程序方案
(2)画出流程图,设计电路,编写程序
(3)撰写课程设计说明书
课程设计任务书
4.主要参考文献:
[1]张靖武周灵彬.单片机原理、应用与PROTEUS仿真,[M]北京:
电子工业出版社,2007年4月.P73-87
[2]高卫东辛友顺韩彦征.51单片机原理与实践,[M]北京:
北京航空航天大学出版社,2008年.P95-99
[3]张红润刘秀英张亚凡.单片机应用设计200例,[M]北京:
北京航空航天大学出版社,2006年.P120-125
5.设计成果形式及要求:
课程设计说明书1份
流程图1份
电路图1份
程序清单1份
6.工作计划及进度:
12年6月11日~6月12日收集整理资料,确定控制方案
6月13日~6月14日画出流程图,编写程序
6月15日~6月16日撰写课程设计说明书
6月22日答辩
系主任审查意见:
签字:
年月日
1、电路图
AT89C51单片机对4*4矩阵键盘进行动态扫描,当有按键盘的键时,可将相应按键值(0~F)实时显示在数码管上。
4*4矩阵键盘原理图:
最常见键盘布局如下图1.1所示。
一般由16个按键组成,在单片机中正好可以用一个p口实现16个按键功能,这也是单片机系统中最常见的形式,本设计就采用这个键盘模式。
绘制原理图:
1)打开protrus仿真软件,进入主界面,然后新建一个图纸文件,软件默认为A4纸张,符合我们的要求,所以不需要修改。
2)开始绘图,点击按钮P,弹出选择添加的器件框图,在Keywords里直接输入所需器件的名称或者在Category的下面各个选项里一次查找所需的器件名称,然后点击ok将所需器件添加进去。
3)依次添加AT89C51芯片,共阳极的7段数码管,16个按键,8个电阻R0~R7,一个晶片,3个电容,地及电源。
4)按照设计的要求正确的连接电路,连接时注意管脚的分配及AT89C51的工作原理。
5)对连接好的电路图进行仿真,如果有错误要先按下暂停,然后对电路进一步的调整与修改,再进行仿真,保存原理图文件。
电路图如下:
2、流程图
3、程序仿真
源程序如下:
#include
#defineucharunsignedchar//数据类型的宏定义
#defineuintunsignedint//数据类型的宏定义
sbitP07=P2^1;
Unsigned;chartcode
table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF};
//共阳数码管显示字型码数组10111111"-"
voiddelay1ms(uinti)
{
ucharj;
while(i--)
{
for(j=0;j<115;j++)//1ms基准延时程序
{
;
}
}
}
voiddisplay(unsignedchari)
{
P07=1;//选通最有端的数码管显示
P0=~table[i];//显示i参数传来的字型码
}
voidmain(void)
{
unsignedchartemp;
display(16);//初始显示"-"
while
(1)
{
//P1=0xff;//先向P1口写1;端口读状态
P1=0xf0;
temp=P1;
if(temp!
=0xf0)
{
delay1ms(15);
if(temp!
=0xf0)
{
P1=0xfe;
temp=P1;
switch(temp)
{
case(0xee):
display(0);break;
case(0xde):
display(4);break;
case(0xbe):
display(8);break;
case(0x7e):
display(12);break;
}
P1=0xfd;
temp=P1;
switch(temp)
{
case(0xed):
display
(1);break;
case(0xdd):
display(5);break;
case(0xbd):
display(9);break;
case(0x7d):
display(13);break;
}
P1=0xfb;
temp=P1;
switch(temp)
{
case(0xeb):
display
(2);break;
case(0xdb):
display(6);break;
case(0xbb):
display(10);break;
case(0x7b):
display(14);break;
}
P1=0xf7;
temp=P1;
switch(temp)
{
case(0xe7):
display(3);break;
case(0xd7):
display(7);break;
case(0xb7):
display(11);break;
case(0x77):
display(15);break;
}
}
}
}
}
仿真结果:
将此程序在汇编器中生成的“.hex”文件,导入AT89C51芯片中,用鼠标右键点击AT89C51,然后点鼠标左键,弹出编辑元件的框图,在programfile里添加.hex文件,再点OK。
点击“开始”按键,进行仿真,点击右边4*4按键,则数码管显示0~F,仿真结果符合实验要求,仿真结果如下图所示: