精品键控流水灯设计Word文档格式.docx
《精品键控流水灯设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《精品键控流水灯设计Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
2中断系统概述
1.中断概念:
中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须中止原来程序的执行,转去执行相应的处理程序,待处理结束之后,再回来继续执行被中止的原程序的过程。
2.中断作用:
采用了中断技术后的计算机,可以解决CPU与外设之间速度匹配的问题,使计算机可以及时处理系统中许多随机的参数和信息,同时,它也提高了计算机处理故障与应变的能力。
3.中断的处理过程:
分为四步,第一是中断请求,第二是中断响应,第三是中断服务,第四是中断返回.
3总体设计
实现这个课题我使用AT89C51作为控制主体,使用八个共阳极发光二极管作为LED显示流水灯,外接两个按钮,一个按键显示一种花样。
外接一个晶振来提供外接时钟脉冲。
模块图如下图所示
系统电路设计图
程序流程图
4模块设计
主体控制模块
芯片AT89C51是核心,P0、P3口均可以作为I/O口使用。
八个LED灯接在AT89C51的P0口上,P3口的P3。
2和P3。
3分别接一个按键,P3.2口的按键实现八个LED灯闪烁五次,P3.3口的按键让LED灯循环右移。
按键控制模块
按键控制模块采用独立式按键接口设计。
独立式按键是每一个按键占用一根I/O端线.特点:
各个按键相互独立,电路配置灵活;
按键数量较多时,I/O端线耗费较多,电路复杂;
软件结构简单。
时钟模块
时钟电路用于产生单片机工作时所需的时钟信号,在芯片的外部通过18脚、19脚接晶体振荡器和微调电容,形成反馈电路,构成一个稳定的自激振荡器。
电路中的C1、C2取30Pf左右,二晶体振荡器的频率范围通常是1。
2—12MHZ,晶体振荡器的频率越高,振荡频率越高。
显示模块
显示模块主体是八个LED灯。
都是接的高电平.当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。
根据发光位置和个数的不同可显示出各种花样.
5程序设计
C语言程序
#include"
reg51.h"
intrins。
h"
#defineuintunsignedint
voiddelay(uintm)
{
uinti;
for(;
m〉0;
m-—)
for(i=0;
i<
124;
i++)
{;
}
}
}
voidTimer0()interrupt0
{
statick;
P0=0xff;
for(k=0;
k<
10;
k++)
P0=~P0;
delay(500);
voidTimer2()interrupt2
unsignedcharoutdata=0x7f;
while
(1)
P0=outdata;
outdata=_cror_(outdata,1);
voidmain()
unsignedcharg=0xfe;
IT0=0;
IT1=0;
EA=1;
EX1=1;
EX0=1;
PX0=1;
P0=g;
g=_crol_(g,1);
delay(500);
汇编程序
ORG0000H
AJMPSTART
ORG0003H
AJMPINTR0
ORG0013H
AJMPINTR1
START:
MOVIE,#85H
MOVIP,#01H
MOVTCON,#00H
MOVSP,#60H
MOVP3,#0FFH
MOVA,#0FEH
LOOP:
MOVP0,A
LCALLDELAY
RLA
AJMPLOOP
INTR0:
PUSHACC
PUSHPSW
SETBRS0
MOVR3,#05H
LP11:
MOVP0,#00H
LCALLDELAY
MOVP0,#0FFH
DJNZR3,LP11
AJMPLP3
LP3:
NOP
POPPSW
POPACC
RETI
INTR1:
PUSHACC
MOVA,#7FH
LOOP1:
LCALLDELAY
RRA
AJMPLOOP1
POPPSW
DELAY:
MOVR7,#45
DELA1:
MOVR6,#20
DELA2:
MOVR5,#248
DJNZR5,$
DJNZR6,DELA2
DJNZR7,DELA1
RET
END
没有加入中断的c语言程序
#include”reg51.h”
intrins.h"
#defineuintunsignedint
uinti;
for(;
m>
0;
m--)
for(i=0;
124;
{;
}
voidshanshuo()
unsignedintk;
if((P3|0xfb)!
=0xff)
for(k=0;
k〈10;
delay(1000);
unsignedcharoutdata=0x7f;
;
)
P0=g;
shanshuo();
if((P3|0xf7)!
shanshuo();
outdata=_cror_(outdata,1);
g=_crol_(g,1);
delay(1000);
张老师,这个没有用中断的c语言程序利用for语句和if语句的相互嵌套,实现了中断里面的优先次序,但系统的灵活性还是没有用中断的程序好,但这个程序也是我花时间写出来的,当时就是想,能不能不用中断也实现这样的功能,虽然这个程序没有按要求做,但我还是想写在这里,毕竟这也是我的成果,希望老师能理解。
6系统的调试与仿真
当没有发生中断时,八个LED灯是循环左移闪亮的
当INTO发生中断时,八个LED灯闪烁五次
当INT1发生中断时,八个LED灯是循环右移闪亮的
对于这次的调试,比上次的情况好多了,开始做汇编语言的时候,仿真时,系统循环左移老是不对,总是两个灯一起移动,后来我在网上查阅相关资料,大幅修改了左移函数,最终达到了想要的结果;
做c语言调试时,大问题不多,主要是语法有很多错误,这都是我编程时的疏忽大意,经过修改,也同样实现了该功能。
7学习的感想与收获
8对老师的意见与建议
对于单片机这门课,我认为作为一个老师来说,要教好一个学生这是一个挑战,但张老师做得很好,也很到位,我认为我听得还挺明白,但我对老师的课也有一些建议:
老师您的课堂大致可分为两部分,第一部分是纯粹的讲单片机理论,比如讲一节课的定时或者中断,第二部分就是叫大家自己把第一节课的PPT上的程序仿真出来,然后给老师您看。
对于第一个部分,我认为每个老师都会这样做,主要是第二部分,第二部分无非就是给出程序,然后叫大家仿真出来,这是非常简单的,就是按步骤执行就可以做出来,因为最难做的程序是给好的。
而我希望第二部分能有一些改进,比如老师您可以基于上节课讲的一个单片机系统马上给出一道与之类似的题,在第二节课的45分钟里带着大家,和大家一起来做这个系统,我们大家一起来一步一步完成这个系统,而这个过程重点就是讲编程,即一边带着大家一起编程,一边讲解汇编语言,这样效果比纯粹讲一节课的汇编语言更有效,就相当于在课堂上实现了实践。
另外我认为同学们多多少少有一点c语言基础,讲c语言编程的话会更容易懂,但指令系统还是不得不用汇编语言。
以上就是我对老师的意见与建议,如果有什么语言不当,没有礼貌的地方,还希望老师理解和见谅。
我期望的成绩:
优秀