最新单片机课程设计键控彩灯.docx
- 文档编号:9088631
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:9
- 大小:25.35KB
最新单片机课程设计键控彩灯.docx
《最新单片机课程设计键控彩灯.docx》由会员分享,可在线阅读,更多相关《最新单片机课程设计键控彩灯.docx(9页珍藏版)》请在冰豆网上搜索。
最新单片机课程设计键控彩灯
单片机课程设计--键控彩灯
成员:
45,31,10,03,43类别:
09机电(4)类别描述
(1)设计目的1. 熟悉51系列单片机。
2. 熟悉汇编语言编程。
3. 掌握单片机应用系统的设计方法、过程和实现。
(2)设计任务描述、要求 键控灯笼系统:
1. 键盘控制其操作和停止。
2. 键盘控制其流程和流向。
3. 键盘控制其照明模式。
A.全开全关 B.交叉照明 成员之间的分工:
袁德:
04组长。
在总体设计中,任务描述、框图、功能模块图和相关描述被分发给成员,以协助程序编辑和错误处理,并找到数据和经验。
唐越:
担任软件设计师,根据功能模块图细分流程图,编辑相应的程序和功能相关指令,搜索数据。
曾于震:
作为一名硬件设计师,他根据总框图在DXP软件中画出原理图、印刷电路板,寻找数据。
邱根:
排版WORD,协助唐越进行软件设计和数据搜索。
曹琪:
在仿真软件上对编辑好的程序进行仿真培训和错误处理。
目录第1章硬件设计11.1总体框图1 1.2 原理图和印刷电路板图2 1.3 80C51描述:
4 第2章软件设计62.1 功能框图6 2.2主控制流程图7 2.3键盘检测流程图9 2.4功能键处理流程图13 2.5显示灯流程图15 2.6代码实现19 第三章 模拟和调试283.1调试步骤28 3.2错误处理30 3.3模拟结果31 第四章 设计经验32参考34第1章硬件设计1.1总体框图 键盘控制 80C51芯片发光二极管彩色灯显示振荡器电路复位电路电源电路功能描述:
电源:
80C51单片机采用5V电源,正极接40引脚,负极接20引脚。
振荡电路:
在80C51单片机中集成一个高增益定向放大器,用于构成放大器。
只有晶体振荡器和电容器被连接起来形成一个完整的振荡电器。
晶体振荡器跨接在引脚18(XTAL2输出)和19(XTAL1输入)之间,引脚18和19通过两个小电容并联接地。
晶体振荡器可以使用一个12兆赫兹的小型水平晶体振荡器,电容值可以在18到47pF之间。
通常,可以使用27pF的小磁片电容器。
复位电路:
微控制器上的9引脚(RST)为复位引脚,采用手动复位,电容为10uF,连接在RST和地之间的电阻为10kω/Vpp引脚:
31引脚为/Vpp,此引脚接地。
键盘电路:
单片机P3.2~P3.5引脚作为输入,在软件中设置 38 1.当按键未按下时,单片机引脚处于高电平;按键时,引脚接地,单片机引脚处于低电平。
通过编程软件(使用连续查询的方法),你可以知道一个键是否被按下以及哪个键被按下。
灯笼展示:
发光二极管的阴极连接到单片机的引脚P1.0~P1.7,阳极连接到+5V电源。
当P1端口引脚连接到高电平时,发光二极管灯不点亮;当P1端口引脚连接到低电平时,发光二极管灯点亮。
1.2 原理图和印刷电路板图 功能描述:
8个发光二极管连接到8*470电阻,连接到P0端口,复位电路连接到RST端子。
复位电路使用手动复位。
电路的电阻值为1K,电容为C=10uF. P3.2~P3.5连接到四个弹性键,四个上拉电阻(4*1K)连接到键的前面。
单片机采用的晶振频率为6HZ 本电路中使用的两个电容C=(5~30pF)EA在片外只读存储器模式下接地。
PCB板图功能描述:
用DXP软件绘制图2和图3。
通过这些,可以在电路板上实现硬件电路的安装和制造。
待调试部件清单:
序列号、名称、型号/规格、附件数量、图纸编号1单片机芯片AT89C5112碳膜电阻4708R1~R83碳膜电阻10K1R94碳膜电阻1K4R10~R135触摸开关LSH4S1~S46无极性电容27pF2C1~C27无极性电容10uF1C38水平晶振12HZ1CY1.3 80C51的相关说明:
80C51引脚描述:
、主电源引脚Vcc和GND Vcc(40引脚):
主电源连接到+5VVSS(20引脚):
接地2、时钟电路引脚XTAL1 xtal2XL2(引脚18):
连接到外部晶体振荡器的一端。
片内是振荡电路反相放大器的输出。
XTAL1(19(引脚19):
连接到外部晶体振荡器的另一端。
片内是振荡电路的反相放大器的输入。
3、控制信号RST/Vpd、ALE/(/PROG) 、/ PSEN和(/ea)/vppst/vpd(引脚9):
复位端子。
高电平有效,宽度大于24个时钟周期,从而复位单片机。
该引脚具有复用功能。
Vpd是备用电源的输入,用于防止主电源断电。
ALE/(/PROG)(30英尺):
数据锁存信号端子。
当访问片外存储器时,ALE充当低8位地址的锁存控制信号。
当平时不访问片外存储器时,输出脉冲固定在时钟振荡频率的六分之一。
ALE侧负载驱动能力为8个LSTTL门。
该引脚具有多路复用功能,用作编程脉冲输入,用于对片内程序存储器进行编程(固化)。
/PSEN(引脚29):
读取片外程序存储器的选通信号端子。
承载能力为8LSTTL门。
当读取外部只读存储器以实现外部只读存储器单元的读取操作时,PSEN为低电平有效。
1、读取内部只读存储器时,PSEN不工作; 2、当外部只读存储器读取时,它将在每个机器周期运行两次; 从外部随机存取存储器读取时,3、两个PSEN脉冲 将不会输出跳过的;4、当连接外部只读存储器时,它连接到只读存储器的运行经验引脚。
(/EA)/VPP(引脚31):
/ea终止于高电平,中央处理器指令自动从片内程序存储器扩展到片外程序存储器。
当/EA端子为低电平时,中央处理器仅从片外程序存储器中获取指令。
该引脚具有多路复用功能,Vpp是对片内程序存储器编程时的编程电压。
4、输入/输出引脚P1、和P3端口 P1.0~P1.7(英尺1~8):
8位双向输入/输出端口。
负载容量为3个LSTTL门。
P1端口仅用作输入/输出端口:
内部有上拉电阻。
P3.0~P3.7(英尺10~17):
8级双向输入/输出端口。
负载容量为3个LSTTL门。
还有一个特殊的第二功能。
端口2的第二个功能、P3:
P3.0(10英尺):
RXD(串行端口输入) P3.1(11英尺):
TXD(串行端口输出) P3.2(12英尺):
/INT0(外部中断0输入) P3.3(13英尺):
/INT1(外部中断1输入) P3.4(14英尺):
T0(定时器/计数器0外部输入) P3.5(15英尺):
T1(定时器/计数器1外部输入) P3.6(16英尺):
/WR(片外数据存储器的写选通信号输出) P3.7(17英尺):
/RD(片外数据存储器的读选通信号输出 第2章软件设计2.1 功能框图 主程序键盘检测模块功能键处理模块彩色光流显示模块去抖延迟模块延迟模块功能描述:
键盘扫描模块:
检测一个键是否被按下,扫描两次以确保一个键被按下,然后检查一个键是否由于抖动而被释放。
延时去抖模块:
由于存在按键抖动,键盘抖动时间一般为5~10ms,抖动现象会导致中央处理器多次处理一个键盘操作,可能导致错误。
因此,通过软件来消除抖动的影响。
主程序模块图:
连接和初始化模块。
灯笼显示模块;自来水灯模块采用8个发光二极管,通过编写代码实现四中自来水彩灯。
本设计采用普通的阳极连接方式,通过给单片机不同的初始值,可以看到彩灯的变化。
延时模块:
延时是为了让我们看到彩灯变化的效果,这样我们就可以看到彩灯的流动。
2.2主控制流程图 开始 堆栈初始化初始化P1初始化复位程序中的所有标志位UPDOWN、STARTED、YUAN、QUAN、左毅、 调用键盘检测程序F0到流光复初始值是1?
调用键盘处理程序调用显示程序YN图1主程序流程图功能描述:
图1主程序流程图,编写汇编主程序,开始初始化堆栈,复位P1会使色灯一开始处于关闭状态,复位所有标志位,否则很容易在下一个操作中出错。
给流代码一个复杂的初始值,然后调用键盘程序查看是否有一个键被按下,并跳回显示程序,如果F0是,调用功能键处理程序,然后在调用显示程序时返回循环。
2.3键盘检测流程图 有按键吗?
扫描键盘键盘扫描有按键吗?
是否有按键来获得键值n并延迟去抖?
你的钥匙释放了吗?
设置键按下标记YN清除键按下标记退出图2键盘检测流程图功能描述:
根据图2,写键盘扫描程序,首先清除F0键,因为下面要读取P3端口,首先ORL写1到P3,然后给P3一个到其他四个位置1,如果反向一个,那么没有键按跳回来。
如果是1,则按键。
因为按下的键有抖动,去抖动延迟程序被调用来扫描在稳定期间是否有键被按下。
如果有一个键被按下,去抖键的值被设置为B。
F0键标志被设置为1。
在K_RET中,P3端口设置为读P3端口,ORL为A。
如果为0,则释放的密钥返回主程序。
如果是1,则没有释放的键跳回到K_RET周期,以检测是否有键被按下。
延迟去抖流程图从R7复合D1:
R6复合R6J减1至0开始?
R7减1至0?
回到图5延迟去抖流程图延迟:
;去抖延迟程序MOVR7,#100;R7的初始值是D1:
MOV·R6,#100;将R6返回到其初始值DJZR6,美元;当R6循环100次跳到自己的线路DJNZR7时,D1;R7循环跳转到D110次,以重新循环RET功能描述:
根据图5编辑20毫秒去抖延迟程序,首先给出R7和R6复数值,然后首先从内部循环R6中减去1,直到它减少到0,例如R6,即从外部循环R7中减去1,如果它没有达到0,则跳转回D1,并且当R7=0时返回。
公式=1us*2*100*100=20ms2.4功能键处理流程图 获取键值 是00100000吗?
是00010000吗?
是00001000吗?
是00000100吗?
NNNNn返回起始端为1?
y重置开始结束n设置开始结束为1左毅为1?
将左毅设置为复位Y,将左毅设置为1N,将YUN设置为1,将QUAN设置为1,将UpDown设置为复位YUN设置为复位YUN设置为复位YUN图3功能键处理流程图功能描述:
根据图3编写功能键流程图,当ACC.2为1时,跳过第一个键处理:
查看开始标志是否为1?
如果不是1,将其设置为1开始。
如果是1,跳转D40重置开始标志。
其他标志被重置然后返回, ACC.2按0的顺序执行。
当ACC.3为1时,跳过第二个按键处理:
查看左移标志是否为1,如果为1,跳到D30将左循环流量标志复位,将上升下降设置为1,将其他标志复位返回。
如果它是0,它向左移动1,这意味着它向左移动。
YUANreset将右循环标志设置为1以返回。
ACC.3=0按顺序执行。
ACC.4是1,跳到第三个按键处理:
将全亮全关标志和十字灯设置为1,并将向上向下复位返回。
如果ACC.4为0,则按顺序执行ACC.5,并跳到第四个按键处理:
重置上升下降,将YAUN设置为1,并重置全部打开和全部关闭以返回。
ACC.5=0返回主程序。
2.5显示灯流程图开始端=1?
上升速度是1?
元是1?
给P1·左毅0FEH作为1?
把LAMPCODE给阿尔卡,把A给LAMPCODE,把A给P1延迟程序,把LAMPCODE给RRA,把A给LAMPCODE,把A给P1延迟程序QUAN是1?
返回D20到A,A到D20,A到P1,呼叫延迟程序,D10到A,返回A到D10,返回A到P1,呼叫延迟程序,返回结束YYYYYNNNNN给0ffh到P1,开始图4,显示彩色灯流动程序流程图功能描述:
根据图4编译汇编程序,通过功能键处理程序,可以知道当第一个键被按下时,启动键将设置为1,其他复位将从LAPM跳转到LAMPSTART,0FE将显示到P1港。
第一个灯亮表示按下第一个键时启动。
因为R0增加1,跳转D40将重置开始标志,并且LAMP将关闭重置灯到P1返回。
当启动后按下第二个键,将左一跳设置为D50,执行单灯左移程序,左一跳设置为LAPCODE,以确保反向流动,它可以从原始状态返回,然后调用延迟程序查看。
当再次按下第二个键时,因为先前的功能处理程序向R1加1以跳到D30来重置左移位标志,所以执行右单灯流程程序返回。
但是,当第三个键被按下时,通过设置1来重置其它的YUAN和QUAN标志,即跳到D80,跳到D90,执行全开和全关程序,给D20给A,反向A给P1和D20,记住当前状态,并调用延迟程序返回。
按下第四个键时,将YAUN设置为1,重置其他标志,执行交叉照明程序,将D10转换为A,将A转换为P1和D10,调用延迟程序返回,然后结束。
延迟流程图开始叠加到R7复初始值D51:
R6复初始值D52:
R5复初始值D53:
R5减1至0?
R61比0?
R7减1至0?
图6延迟流程图功能描述:
由于去抖延迟增加了R7、R6,所以它最初是为了保护堆栈站点,R7、R6、R5复数值,如果R5减1,跳过D53循环R5=0到R6减1,看看R6是否为0,如果不是,那么 跳到D52循环,当R7达到0时,从R7中减去1。
查看0?
如果不是,跳过D51循环,如果R5=0,推动堆栈并返回。
10秒延迟公式=100*250*200*2*1us=10ms2.6代码实现 上升下降 BIT00H右循环标志从01h开始;起止标志元位02H全位03H,全开和全关标志;交叉照明标志左毅BIT04H左右循环旗EQU21H;存储移动数据代码D10equ22HD20equ23horg0000hajmpmmainorg0030hmmain:
;主程序MOV标准普尔,#5FH设置堆栈指针初始值MOVP1,#00HP1初始化CLR更新;Clrstarted在启动时处于向上状态;该标志位初始化D10#55h;交叉点亮灯流代码MOVD20,#00HMOV·兰普克德,#01H编码MOVR0,#00H为单灯流量;软件计数被清除MOVR1,#00H软件计数清除循环:
a密钥;调用JNBF0键盘程序;如果没有按下任何键,请继续按下所有键;否则,调用键盘处理程序LNEXT:
ACALLLAMP;调用灯显示程序AJMPLOOP重复这个循环,主程序到此结束。
延迟:
;去抖延迟程序MOVR7,#100;R7的初始值是D1:
MOV·R6,#100;将R6返回到其初始值DJZR6,美元;当R6循环100次跳到自己的线路DJNZR7时,D1;R7循环10次,并跳转到D1回收RET返回关键人物:
MOV甲,乙;从寄存器b获取键值jbcc.2,keyd30 ;分析键的代码。
如果按下某个位,则该位为1 JBACC.3,键D50 JB ACC.4,按键60 JB ACC.5,按键D70 AJMP 键_RET键d30:
;按下第一个键后,jb开始结束,d40被处理。
如果开始标志为0,则setbstarted开始;将启动标志设置为1clr左毅;重置其他标志位clr元clr权AJMPKEY_RET;返回d40:
clrestend。
重置起点,左毅;复位其他标志位CLRYUANclrupdownAJMP密钥_RET;返回键d50:
;按下第二个键后,jb左毅,d30将被处理。
如果左移标志是0设置左毅;那么左移位标志是1CLR元;复位元旗位SETB上升下降;将向上向下设置为1AJMP键_RETD30:
;否则跳到D30·克莱儿·左毅;给左毅设1个人民币元;复位元旗位SETB上升下降;将向上向下设置为1AJMP键_RET;返回键D60:
;按下第三个键后设置博元;将“元”设置为1CLR向上向下;重置上下行SETB权;将QUAN设置为1AJMP键_RET;返回键D70:
;按下第四个键后Clr上升;将上升气流重置为下降气流;将“元”设置为1CLRQUAN重置全钥匙_重置:
重置;返回密钥:
;键盘扫描仪CLRF0清除F0表示没有按键。
ORL·P3,#00111100BP3港的四个钥匙连接位置1莫瓦和P3相互连接。
取P3的ORLA值,#11000011b将剩余的4个职位归入甲类;取逆JZ键_RET1;如果是0,则必须没有按键来按ACALLDELAY否则,延迟去抖ORLP3,#00111100B去抖后,再次检查是否有任何按钮按下mova,p3orla,#11000011bcpljzk_retmov,a。
确实有一个按键,并且该键值存储在b中,SETBF0;设置标记K_RET:
;键盘释放程序ORLP3,#00111100B这里,循环等待释放键mova、p3orra、#11000011bcplajzk_ret1;直到读取的数据被反转到0,才释放该键,才从键盘处理程序返回AJMPK_RETK_RET1:
Key_RET1:
返回RET-D500MS:
;自来水灯延时推PSWSETBRS0MOVR7,#10;给R7一个复数初始值D51:
MOV·R6,#250;给R6一个复杂的初始值D52:
MOVR5,#200;给R5一个复数初始值D53:
DJNZR5,D53;R5减1至0跳D53R6D52;R6减1至0跳D52DJNZR7、D51R7减1至0跳D51POPPSW可再生能源堆外;返回灯:
jbstarted,lamptart如果StartEnd=1,启动MOVP1,#00H否则停止移动灯代码,#01hcr左毅ajmp灯;返回到LampStart:
;启动程序jbpupdown,lampup如果UpDown=1,jboyuan,d80将向右流动;如果YUAN=1,流量movp1完全亮且完全熄灭,#01h从P1开始。
AJMPLAMPRET上的1盏灯;返回LAMPUP:
;灯右流量程序JB左毅,D50如果左毅=1,则向左流动MOVA,兰普码;将单个灯连接到右后一个灯;向右移动一个MOV灯码,一个;将更改后的值赋予MOV·P1;给P1LCALLD500MS;延迟程序AJMPLAMPRET返回D50:
;左流程序MOVA,兰普码;将一盏灯流至一个区域;左移一Move给P1·MOV·兰普码一个;将更改后的值赋给兰普克LCALLD500MS延迟程序AJMPLAMPRET返回D80:
;交叉照明计划JBQUAN,D90如果QUAN=1,D10MOV的所有节目都将开始。
向apcla提供交叉照明代码;取逆MOVD10,一;给D10·MOV·P1后,答;给P1LCALLD500MS;延迟程序ajmpLAMPRET返回D90:
;MOVA、D20为全开和全关程序;给apcla完全明亮的代码;取逆MOVD20,A;后给D20MOVP1,一个;给P1LCALLD500MS;延迟程序LAMPRET:
;返回RET端;结束第3章模拟和调试3.1调试步骤
(1)源文件的建立:
启动Keil软件,选择文件→新建,进入源程序,输入后,选择文件→保存,命名文件TXIT.ASM保存。
(2)项目的建立 选择项目→新建项目,然后创建一个名为200的项目文件并保存。
通常,项目和源文件放在同一个文件夹中。
小心不要添加扩展名称。
然后选择Atmel的89S51并点击确定。
选择后,当功能建立后,此时返回主界面,然后在项目管理窗口中点击目标1下的源组1将其高亮显示,然后右键单击鼠标,在弹出的快捷菜单中选择添加文件到组“源组1”项,在“文件类型”下拉列表框中选择Asm源文件(*.a*);*.src),将显示该文件下的*.asm文件。
双击要添加的文件名,或单击要添加的文件名,然后单击”添加”按钮将文件添加到项目中。
(3)项目设置 为目标“target1”选择项目→选项,打开“调试”选项卡,在左下方的“参数”文本框中输入“-dledkey”,然后单击“确定”关闭对话框。
(4)编译、链接 项目建立后,可以编译链接。
按F7组装、链接 标准文件,然后选择调试→启动/停止调试菜单项或快捷键Ctrl+F5进入调试状态。
选择外围设备→键盘显示实验模拟板,然后点击“运行”按钮开始操作。
当没有按下第一个键P3.2时,按下任何其他结果彩色灯没有现象。
l 按下第一个键P3.2后,连接到堆栈P1.1的灯将打开,而其他灯将关闭。
l 按下P3.2键后,灯全部熄灭。
l 按P3.2查看灯,按第二个键P3.3向左流动,按键向右流动,按键向左移动。
l 按下第三个键P3.4后,彩色灯从单向流动变为完全打开和完全关闭,并交替打开。
l 当按下第四个键P3.5时,彩色灯从全开和全关交替变为交叉循环开启。
l 按下P3.2,所有灯都将关闭。
3.2错误处理 收到老师发来的课程设计后,我根据书本和自己的想法编写了程序,并进行了软件仿真和调试。
人们发现,当第二个键被按下时,所有的左和右循环都不存在,所有的亮和所有的死都与横流一起出现。
我按下停止键,一步一步地跑。
当我来到显示程序时,我看到黄色箭头在左右单灯中流动,并没有直接返回跳到全亮全死程序。
我在程序的最后添加了一个AJMP LAMPRET后,经过点编辑和点连接后进入调试状态,点操作可以实现每个键控制相应的程序,不会出现刚才发生的现象。
然而,我发现在按下第一个键停止后,当按下第一个键和第二个键左右流动时,它不是从开始流动,而是从上次停止的地方流动。
如果R1在停止的程序中被清除,它可以从调试后的初始状态开始流动。
经过处理,仿真结果基本满足设计要求。
3.3模拟结果 仿真结果基本满足任务要求。
当开始键(P3.2)未能按时按下任何键时,指示灯不变。
按第二个键(P3.3)向左移动,然后向右移动。
当按下第三个键(P3.4)时,发光二极管灯变为全亮全灭。
当按下第四个键(P3.5)时,发光二极管将立即变为跨周期照明。
按第二个键、第三个键发光二极管显示相应的颜色灯变化。
按第一个键关闭所有灯,停止发光二极管。
第四章设计经历通过这次课程设计,我学到了很多知识,也认识到了很多问题。
与此同时,我意识到一个非常重要的问题,那就是课程设计前的准备工作也非常重要,包括提前预习设计题目、去图书馆和查阅资料。
我清楚地知道,信息也是如此重要,否则在目前一个新奇的话题中,你将无法开始。
通过准备工作,这样可以保证在设计的时候,我有足够的准备,这样我就不会在真正想开始课程设计的时候,茫然地看着题目,毫无进展。
因此,我认为这也是一种良好的学习态度,我将永远以这种态度对待学习。
除了第二次之外,让我发现钥匙灯的设计不仅是对我以前的单片机知识的一个很好的应用,也让我花时间复习以前的知识点,把知识点相互结合起来,这样知识点就可以联系在一起,在我的学习中取得很大的成功。
在编程的过程中,我也遇到了很多问题。
经过我的思考和自己的努力,经过多次修改,我终于完成了模拟软件中关键灯光的基本功能。
总的来说,这个设计受益匪浅,因为这个课程设计是一个团队合作,所以它不仅让我们团结合作,学习知识,而且让我们学会更多的交流。
不仅培养了实践能力,也培养了设计思维。
在探索如何设计电路实现所需功能的过程中,锻炼应用所学知识的灵活性,加深对知识的理解,提高解决问题的能力。
在意识到电路设计的艰辛的同时,我们也意识到了成功的喜悦和幸福。
对于这门课程的设计,我首先要感谢的是我们江西机电工程学院。
这是他为这次练习提供的机会。
它让我们有机会练习、进一步学习和巩固我们所学的知识点。
当然,我还要感谢万,他是我这次单片机课程设计的指导老师。
他每天都会来我们的课程设计教室指导我们的设计。
当我们在课程设计中遇到问题时,他总是认真地帮助我们解决问题。
他会一遍又一遍地这样做,直到我理解他们。
非常感谢!
为此,我将努力学习,丰富我的大脑,努力奋斗!
!
!
参考[1]周建. 单片机项目教程. 北航大学出版社 2008.6ISB978–7–8112
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 单片机 课程设计 键控 彩灯