您好,欢迎来到九壹网。
搜索
您的当前位置:首页单片机最小系统实现花样流水灯

单片机最小系统实现花样流水灯

来源:九壹网
基于STC-C51的流水灯的设计与实现

一、设计目的

以STC-80C51单片机最小系统为核心,设计多样式流水灯。掌握外围LED电路的设计方法,熟练掌握C51软件编程控制方法,实现LED闪烁功能,最终完成单片机的应用与外围电路的开发任务。 二、设计任务

首先以STC-80C51单片机原理图为蓝本,焊接单片机最小系统板并上电测试成功;其次在最小板的开发区焊接LED电路并测试成功;最后用keil C编程软件及STC-ISP下载软件完成STCC51单片机对外围流水灯设计的整体控制。 三、设计需求

整个流水灯系统由按键控制,实现各种状态之间的转换,即按键第一次压下,流水灯进入到第一种状态;按键第二次压下,流水灯进入到第二种状态;以此类推。 四、设计材料

序号 1 2 4 5 6 7 器件 STC-C52单片机最小系统板 LED发光二极管 微动开关 1200Ω 导线 焊锡丝 数量 1 16 1 17 1m 1 功能 核心 灯显 按键 LED上拉电阻 辅助材料 辅助材料

开放与创新实验_流水灯设计报告

流水灯控制系统设计

摘要:

本系统由单片机系统、外中断键盘(微动开关)、发光二极管等部分组成。系统能够实现以下功能:

1. 灯阵从由下顶点开始,同时从两边向上延伸点亮。 2. 灯阵从由上顶点开始,同时从两边向下延伸点亮。

3. 灯阵从由下顶点开始,以逆时针依次点亮,最后回到下顶点。 4. 灯阵从由下顶点开始,以顺时针依次点亮,最后回到下顶点。 5. 先奇数灯点亮,然后偶数灯点亮,呈交替状态。 6. 所有灯先同时点亮,后同时熄灭,呈闪烁状态。 7. 以上六种状态依次运行。

以上七种运行方式,由外部中断(微动开关)控制,即一次中断运行状态1,两次中断运行状态2,… 当遇到第八此中断时,再次从状态1开始。

整个系统中,以按下微动开关的次数作为输入信号,以发光二极管的亮和灭及其顺序为输出信号,软件系统中,以C51语言作为基本编程语言,以左移和右移作为控制发光二极管是否发光和发光顺序的基本方式。

关键词:单片机,发光二极管,微动开关,外部中断,C51语言。

1

目录

一.绪论 .................................................................................... 3 二.实验原理: ........................................................................ 3 三.实验的各种方案(输入端接按键及外部中断接按键两种方案)论证优劣 .................................................................. 4 四.硬件设计 ............................................................................ 4 五.软件设计 ............................................................................ 5 1.流程图: ............................................................................ 5 2.源代码: ............................................................................ 6 五.系统调试(用keil.c51对程序进行调试,以及把程序烧

录到单片机的过程): .................................................... 10 六.实验心得体会(设计过程中出现的问题) .................... 10

2

一.绪论

1.题目分析

设计要求是流水灯的控制,需自己设计图形并实现若干种状态。

2.功能要求

我们利用STC80C51单片机作为核心控制部分扩展外部并口芯片,用P0、P1端口控制灯的亮灭,P3.2端口控制按键,应用外部中断来实现流水灯的控制。

二.实验原理:

中断的概念:

CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。

MCS-51单片机的中断系统结构图:

主程序 中断请求 执行主程序 断点 继续执行主程序 中断响应 执行中断处理程序 中断返回 3

三.实验的各种方案(输入端接按键及外部

中断接按键两种方案)论证优劣

方案一:利用STC-80c51单片机作为系统核心控制部分扩展外部并口芯片。由P0、P1、P2端口控制发光二极管,选择P0、P1、P2任一端口接按键来控制流水灯。

方案二:利用STC-80c51单片机作为系统核心控制部分扩展外部并口芯片。由P0、P1、P2端口来控制灯的亮灭,P0.2(检测中断信号)接按键。

方案一将输入端接按键需要纯粹的软件编程来控制按键,对CPU的利用率高,但在日常生活中利用率不高;而将外部中断与按键相接来控制流水灯,降低了CPU的利用率,可以更好的利用单片

四.硬件设计

此电路总体来说由两部分组成。一部分是STC80C51单 片机,另一部分是单片机的外部扩展由发光二极管构成。 STC80C51单片机:

P0口与P1口外接发光二极管

P3.2口接外部中断开关(微动开关) 其他系统线按要求连接

灯流二极管接线图:

4

五.软件设计

1.流程图:

初始化 向上点亮 向下点亮 逆时针点亮 顺时针点亮 先奇数亮 后偶数亮 闪烁 顺序 5

2.源代码:

#include #include

#define uint unsigned int #define uchar unsigned char void Function0(void); void Function1(void); void Function2(void); void Function3(void); uchar ID; uchar cnt=0; uint j; void main() { SP=0x50; P1=0x00; //P0=0x00; EA=1; IT0=1; EX0=1; TMOD=0x10;

TH1=15536/256; TL1=15536%256; ET0=1; TR0=1; ID=1;cnt=0; while(1) {

if(ID>7) ID=1; switch(ID) {

case 1:

Function0(); break; case 2:

Function1(); break; case 3:

Function2(); break; case 4:

Function3();

6

case 5:

Function4();

case 6:

Function5();

case 7:

Function6(); break;

} } }

void Function0(void) //{

uint i; P1=0xFE; P0=0XFE;

while(cnt!=10); cnt=0;

for(i=0;i<7;i++) {

P1=P1<<1; P0=P0<<1

while(cnt!=10); cnt=0; }

P1=0x7F; P0=Ox7F

for(i=0;i<7;i++) {

P0=P0>>1; P1=P1>>1

while(cnt!=20); cnt=0; } }

void Function1(void) //{

uint i; P1=0x7F; P0=0x7F;

while(cnt!=10); cnt=0;

for(i=0;i<7;i++)

第一种状态:向上交叉点亮第二种状态:向下交叉点亮7

{

P1=P1>>1; P0=P0>>1

while(cnt!=10); cnt=0; }

P1=0xFE; P0=OxFE

for(i=0;i<7;i++) {

P0=P0<<1; P1=P1<<1

while(cnt!=20); cnt=0; } }

void Function2(void) //{

uint i; P1=0xFE; P0=0xFF;

for(i=0;i<7;i++) {

P1=P1<<1;

while(cnt!=10); cnt=0; } P1=0xFF; P0=0xBF;

for(i=0;i<6;i++) {

P0=P0>>1;

while(cnt!=10); cnt=0; }

void Function3(void) //{

uint i; P1=0xFF; P0=0xFE;

for(i=0;i<6;i++)

第三种状态:逆流点亮第四种状态:顺流点亮8

{

P0=P0<<1;

while(cnt!=10); cnt=0; } P0=0xFF; P1=0x7F;

for(i=0;i<7;i++) {

P1=P1>>1;

while(cnt!=10); cnt=0; }

void Function4(void) //{

uint i;

while(cnt!=10); cnt=0;

for(i=0;i<7;i++) {

P1=0xAA; //P0=0xAA;

while(cnt!=20); cnt=0; P1=0x55; //P0=0x55;

while(cnt!=20); cnt=0; } }

void Function5(void) //{

uint i;

while(cnt!=20); cnt=0;

for(i=0;i<3;i++) {

P1=0x00; // P0=0x00;

while(cnt!=20); cnt=0; P1=0xFF; // P0=0xFF;

第五种状态:先奇数灯亮,再偶数灯亮;第六种状态:闪烁3次 9

while(cnt!=20); cnt=0; } }

void Function6(void) //第七种状态:依次点亮 {

void Function5(void) void Function0(void) void Function1(void) void Function2(void) void Function3(void) void Function4(void) void Function5(void) }

void it0() interrupt 1 {TH1=(65536-50000)/256; TL1=(65536-50000)%256; cnt++; }

void int0() interrupt 0 {

ID++;

if(ID>=8) ID=1; }

五.系统调试(用keil.c51对程序进行调试,以及把程序烧录到单片机的过程):

利用STC-80C51单片机作为系统核心控制部分,用外围16个发光二极管模拟流水灯的显示

将所得程序烧录入单片机中.

六.实验心得体会(设计过程中出现的问题)

在这次试验中,我发现的主要问题是好多同学在焊接电路板的时候都是虚焊,导致电路不通或是灯不亮,所以我们应该注意在焊接时尽量防止虚焊,以

10

减少多次焊接,防止电路板被损坏。

这次实验设计让我明白,开放与创新实验课能够给我们一个理论与实践结合的机会。经过查资料、选方案、设计电路、撰写设计报告、使我得到一次较全面的工程实践训练。理论联系实际,提高和培养创新能力。同时,结合PROTIUS软件,进行仿真设计,可以体现现代化的设计方法和理念,使我们各方面能力,得到比较大的提高,在这次的单片机控制流水灯设计过程中,让我加深了对单片机及其工作原理的理解。使我们得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是C51语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础.

11

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务