基于51单片机的心形流水灯_qq_39120899的博客-程序员信息网

心形流水灯套件

1  设计目的

(1)掌握单片机芯片AT89C51的基本功能和使用。

(2)熟悉Proteus仿真软件的使用,了解各元件的功能及作用。

(3)了解音乐的基本知识。

(4)提高数字电子电路的综合应用能力。

(5)掌握Keil软件的使用方法,以及如何创建文件和编写程序。

(6)提高焊接能力以及实际问题分析能力。

2 设计思路

(1)设计一个用单片机控制的心形流水灯系统;

(2)LED灯数量为32个;

(3)将仪器焊接到电路板上;

(4)可以实现循环点亮,依次熄灭的基本功能;

(5)可以实现对角闪亮,间隔闪亮,顺时针闪亮,逆时针闪亮,同时闪亮等多种功能。

3方案论证

1、单片机芯片的比较与选择

单片机作为该电路的主要控制器芯片,即整个系统的控制核心部分,主要是负责控制LED灯的不同变化速度以及变化效果。因此对单片机芯片的选择,必须要求其功耗低、数据转换速率快。

方案一:采用STC89C51单片机。40个引脚,8k Bytes Flash片内程序存储器, 256 bytes的随机存取数据存储器(RAM), 32个外部双向输入/输出(I/O)口, 5个中断优先级2层中断嵌套中断, 2个16位可编程定时计数器, 2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

方案二:选择TI公司生产的MSP430F149系列单片机系统。此款单片机具有低电压、超低功耗的特点,工作电压在3.6-1.8V之间,具有强大的功能和高效的运算处理能力。

方案选择:由于STC89C51芯片价格便宜,支持在线下载程序而且MSP430F149系列单片机的功能已经远远高于我们本系统,操作不便。

综合考虑,我们选择方案一。

4 设计过程

4.1硬件设计

单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。电子琴是现代电子技术与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经融入现代人们的生活中,成为不可替代的一部分。

本设计是以AT89C51单片机为核心控制元件,把51单片机的4个I/O口与32个5mm高亮LED灯相接,通过单片机控制各I/O引脚的高低电平控制LED的亮灭从而形

成各种不同亮灭的花样。

(1)单片机控制模块

硬件电路要以单片机作为主芯片,针对本设计的功能和用途,采用AT89S51单片机更好,实现功能完全,性价比较高,更适合本设计。具体电路如图2所示。

 

(2)74HC245

 

5电路仿真与结果分析

5.1电路原理图

                        

5.2 心形流水灯测试图

                                      

5.2 电路仿真图

 

 

5.3结果分析

根据仿真结果可知,本次课程设计能够准确并彻底的完成设计要求,完成了心形流水灯的设计,实现了LED灯的循环点亮、依次熄灭等基本功能,并且还实现了对角闪亮、间隔闪亮、顺时针闪亮,逆时针闪亮等多种功能。

6设计体会

这次课程设计我们换过几种方案,我们刚开始是选择完全的数字电路来实现,但我们做好仿真时,发现一个问题,频率不能很好的把握,指导老师说这在实物中更难把握,建议我们用单片机来实现,尽管我们现在还没有学习单片机的相关知识,但在老师的指导下,我们查阅相关的资料,进行相关的学习,最终我们实现了设计的要求,并且还新增了一些功能,同时还解决了第一次关于频率的问题,总体来说,此次课程设计使我们收获良多,虽然课程设计的过程中遇到了很多困难与问题,但我们最终还是完成了设计的任务及要求。具体来说可以分为以下几点:第一,不够细心,不够严谨;第二,因对课本理论的掌握度不够导致编程出现错误;第三,硬件方面,刚开始有的程序模块不能实现预期的效果,对于有的硬件,在实物制作过程中焊了比较多的排线,同时对于整体各元器件的布局都有很高的要求。不过在向同学请教,各方面都有了不同程度的改善;第四,在做人方面,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没有什么办不到的。这次课程设计中我们完成了基本任务,使我们有了一定的成就感,也使我们进一步熟悉和掌握了单片机的内部结构和工作原理,了解了单片机应用系统设计的基本方法和步骤, 初步掌握了单片机仿真软件Proteus的使用方法和键盘,同时也掌握了撰写课程设计报告的方法。总之,通过这次课程设计,我们都清楚明白了自己的能力有多深,想提高还得归于多锻炼,多动手,多向别人学习。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附件

实物图

完整程序:

 #include<reg51.h>

#include<intrins.h>

#define uint unsigned int

#define uchar unsigned char

uchar code table0[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//P0-P7依次点亮

uchar code table1[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//P0-P7依次熄灭

uchar code table2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//P7-P7依次点亮

uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//P7-P7依次熄灭

uchar temp,aa,bb,temp,temp1;

void delay(uint z);

void h();

void hh();

void hhh();

void hhhh();

void init();

void main()//主函数

{

 init();

    while(520)//大循环

 {

  h();

  hh();

  hhh();

  hhhh();

 }

}

void delay(uint z)//延时函数

{

 uint x,y;

 for(x=z;x>0;x--)

  for(y=110;y>0;y--);

}

void h()

{

 for(aa=0;aa<3;aa++)

 {

  for(bb=0;bb<8;bb++)

  {

   P0=table0[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P1=table0[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P3=table0[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P2=table0[bb];

   delay(50);

  }

  delay(500);

  for(bb=0;bb<8;bb++)

  {

   P0=table1[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P1=table1[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P3=table1[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P2=table1[bb];

   delay(50);

  }

 }

 for(aa=0;aa<3;aa++)

 {

  for(bb=0;bb<8;bb++)

  {

   P2=table2[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P3=table2[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P1=table2[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P0=table2[bb];

   delay(50);

  }

  delay(500);

  for(bb=0;bb<8;bb++)

  {

   P2=table3[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P3=table3[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P1=table3[bb];

   delay(50);

  }

  for(bb=0;bb<8;bb++)

  {

   P0=table3[bb];

   delay(50);

  }

 }

}

void hh()

{

 for(bb=0;bb<3;bb++)

 {

  for(aa=0;aa<8;aa++)

  {

   P0=table0[aa];

   P2=table2[aa];

   delay(100);

  }

  for(aa=0;aa<8;aa++)

  {

   P3=table2[aa];

   P1=table0[aa];

   delay(100);

  }

  for(aa=0;aa<8;aa++)

  {

   P2=table3[aa];

   P0=table1[aa];

   delay(100);

  }

  for(aa=0;aa<8;aa++)

  {

   P1=table1[aa];

   P3=table3[aa];

   delay(100);

  }

 }

}

void init()

{

 P1=P2=P3=P0=0x00;

 delay(1000);

 P1=P2=P3=P0=0xff;

 delay(200);

 temp=0xfe;

 temp1=0x7f;

}

void hhh()

{

 for(bb=0;bb<10;bb++)

 {

  for(aa=0;aa<8;aa++)

  {

   P0=temp;

   temp=_crol_(temp,1);

   delay(40);

  }

  P0=0xff;

  for(aa=0;aa<8;aa++)

  {

   P1=temp;

   temp=_crol_(temp,1);

   delay(40);

  }

  P1=0xff;

  for(aa=0;aa<8;aa++)

  {

   P3=temp;

   temp=_crol_(temp,1);

   delay(40);

  }

  P3=0xff;

  for(aa=0;aa<8;aa++)

  {

   P2=temp;

   temp=_crol_(temp,1);

   delay(40);

  }

  P2=0xff;

 } 

}

void hhhh()

{

 for(aa=0;aa<30;aa++)

 {

  P0=P1=0x00;

  delay(100);

  P1=P0=0xff;

  P2=P3=0x00;

  delay(100);

  P2=P3=0xff;

 }

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39120899/article/details/80886554

智能推荐

Unity_Shader_顶点数据的in和out输入与输出_黑狗向前跑的博客-程序员信息网

Shader "Unlit/vf2"{ //in out 输入与输出 Properties { } SubShader { Pass { CGPROGRAM// Upgrade NOTE: excluded shader from DX11, OpenGL ES 2.0 because it uses unsized arrays#pragma exclud.

物联网系统串口通信程序设计_oooo-的博客-程序员信息网

**物联网系统串口通信程序设计**安装虚拟串口仿真软件vspd:解压后点击.exe文件进行安装,安装完毕后,进行软件配置。其中端口每两个是配对的,如COM1、COM2。添加端口:之后在 此电脑-&gt;属性-&gt;设备管理器-&gt;端口 中可以查看:注:如果没有找到 端口,则在设备管理器的查看中,勾选“显示隐藏”**-建立两个串口互联互通的模式**打开modsim32,connection-&gt;connect-&gt;Port2此时已经产生了一个物联网

jmeter使用PerfMon Metrics Collector的图表分析_striver_dl的博客-程序员信息网

①蓝色代表CPU(x100):对于CPU纵坐标代表使用率的百分比,只是这个百分比是放大了100倍的,从图中来看,我CPU的使用率平均为45%的样子②粉红色代表磁盘的读写速度(x10000):单位Mb/s,那上面的纵坐标就不是百分比了,而是读写速度了,这个读写速度放大了10000倍而已③红色代表内存的使用(x100):对于内存纵坐标代表使用率的百分比,只是这个百分比是放大了100倍的,从图中来看,我CPU的使用率平均为50%的样子④绿色代表网络的速度:单位kbps...

浮点数与4个字节的转换_qq_25814297-npl的博客-程序员信息网_浮点数转换为4个字节

前言:在串口、IIC、SPI等数据传送时基本上都是一次传送一个字节的数据,如果要传送浮点数据?通常是将浮点数乘以一个倍数,如10,100,1000,10000等,然后将其转换为整型数据再转化为单个字节进行传送。如果这个数据是要进行显示的话,那么这样做并没有什么不好。但是如果这个数是要传输给另端进行继续计算的话,那么就要考虑另一种方法了,就是直接将浮点数据转换为4个单字节,在另一端接受完数据...

什么是vundle_想飞的IT猪的博客-程序员信息网

vundle全名是vimbundle,是一个vim插件的管理器。详见csdn的“vim插件管理器:Vundle的介绍及安装”。

Java学习-14 CSS与CSS3美化页面及网页布局_deemo_hui的博客-程序员信息网

Java学习-14 CSS与CSS3美化页面1. CSS简介什么是CSS?CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示控制 HTML 元素,从而实现美化HTML网页。样式通常存储在样式表中,目的也是为了解决内容与表现分离的问题外部样式表(CSS文件)可以极大提高工作效率多个样式定义可层叠为一,后者可以覆盖前者样式样式层叠次序当同一个 HTML 元素定义了多个样式时,应该使用哪个样式?一般而言,所有的样式会根据下面的规则层叠于一个新的虚

随便推点

博弈论 斯坦福game theory stanford week 4.2__你狗的博客-程序员信息网

title: 博弈论 斯坦福game theory stanford week 4-3tags: notenotebook: 6- 英文课程-15-game theory---博弈论 斯坦福game theory stanford week 4-2练习Correct1 / 1 pointsQuestion 1Two players have to share 50 c...

Android O HIDL的使用例子 -- 蓝牙HCI 服务进程_studyhxz的博客-程序员信息网

目录1、Android O Treble 计划1.1、Treble 计划概览1.2、Android 7.x vs Android O 2、HIDL 基本概念3、HIDL 的使用例子-- 蓝牙 HCI 服务进程3.1、定义 &amp;amp; 实现接口3.2、编译生成的文件3.3、启动 HIDL service3.4、Client 端获取并使用 Service ...

Linux远程连接工具FinalShell使用_goose_flesh的博客-程序员信息网_finalshell是干什么的

1.FinalShell软件介绍FinalShell是一款美观易用、功能强大的国产网络服务管理软件,十分实用和方便,简单大方的界面设计让用户一目了然。主要是通过命令行操作服务器。2.FinalShell安装 官方网站下载软件http://www.hostbuf.com/t/988.html 直接双击finalshell_install.exe文件进行安装,安装过程中提醒需要安装WinPacp,直接点击确定即可 3.FinalShell配置3.1配置...

机器学习python中train_test_split()函数划分训练、测试数据_peachlychee的博客-程序员信息网_python train_test_split函数

train_test_split()函数是用来随机划分样本数据为训练集和测试集的,当然也可以人为的切片划分。优点:随机客观的划分数据,减少人为因素完整模板:train_X,test_X,train_y,test_y = train_test_split(train_data,train_target,test_size=0.3,random_state=5)参数解释:train_data...

MySQL 删除视图_风叶翩翩的博客-程序员信息网_mysql删除所有视图

删除视图是指删除 MySQL 数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。基本语法可以使用 DROP VIEW 语句来删除视图。语法格式如下:DROP VIEW &lt;视图名1&gt; [ , &lt;视图名2&gt; …]其中:&lt;视图名&gt; 指定要删除的视图名。DROP VIEW 语句可以一次删除多个视图,但是必须在每个视图上拥有 DROP 权限。...

Asterisk 电话落地的几种途径,ET263设置_杨江的博客-程序员信息网_asterisk 落地

PSTN固话:个人,的PC机插入  模数转换卡,比如单口的Digium x100p,4口的TDM 400,淘宝上面自己找了。GSM手机:蓝牙接入,需要一台台式机,一个蓝牙接收器,配置chan_mobile数字E1线路:电信公司提供的光缆/数字缆,通常公司用户采用,比如Digium的数字板卡SIP服务:国外的小蜜蜂vbuzzer, 国内的 ET263 中国行服务Skype:需要Skye Conne

推荐文章

热门文章

相关标签