STC15系列-流水灯和数码管
- 格式:doc
- 大小:30.50 KB
- 文档页数:3
“流水灯”程序设计说明1程序设计思路流水灯是经典的测试发光二极管是否正常工作和学习使用发光二极管的案例。
流水灯电路连接示意图2关键代码设计说明本程序由三个函数组成:(1)void Init() 初始化函数{P0M1 = 0x00;//0000 0000P0M0 = 0xff;//1111 1111 将P0各位设置为推挽输出P2M1 = 0x00;//0000 0000P2M0 = 0xff;//1111 1111 将P2各位设置为推挽输出led_sel = 1;//为1时是led灯显示,为0时是数码管显示}(2)void delay(uint t):本过程目的是延时tms;但是延时的时间可能不是很准确。
单片机工作时,是在统一的时钟脉冲控制下有序进行的。
这个脉冲是由单片机控制器中的时钟电路产生的。
时钟电路由振荡器和分频器组成,振荡器产生基本的振荡信号,然后进行分频,得到相应的时钟。
振荡电路通常有内部振荡和外部振荡两种方式。
STC15F2K60S2单片机内部集成高精度R/C时钟,工作时钟可以使用内部振荡器或者外部晶体振荡器(简称晶振)产生的时钟。
外部振荡信号通过内部时钟电路,经过分频,得到相应的时钟信号。
图2外部振荡模式工作原理示意图说明:(1)振荡周期:晶体振荡器的周期。
(2)状态周期:振荡信号经二分频后形成的时钟脉冲信号,用S表示。
一个状态周期的两个振荡周期作为两个节拍分别称为节拍P1和节拍P2。
P1有效时,通常完成算术逻辑操作;P2有效时,一般进行内部寄存器之间的传输。
(3)机器周期:完成一个基本操作所需的时间称为机器周期。
一个机器周期包含6个状态周期,用S1、S2、….、S6表示;共12个节拍,依次可表示为S1P1、S1P2、S2P1、S2P2、……、S6P1、S6P2。
(4)指令周期:CPU执行一条指令所需要的时间。
CPU执行指令是在时钟脉冲控制下一步一步进行的,由于指令的功能和长短各不相同,因此,指令执行所需的时间也不一样。
课程设计任务书题目键盘控制数码管显示及LED点亮学院(部) 电子与控制工程专业建筑设施智能技术班级320601学生姓名学号5 月15 日至 5 月22 日指导教师2014 年5月22日目录一、摘要 (2)二、设计要求 (2)三、方案设计说明 (2)四、程序流程图 (4)五、模块介绍 (4)1)8051CPU (4)2)数码管显示 (5)3)4×4键盘输入 (5)4)流水灯显示 (6)六、源程序 (7)程序执行结果 (11)七、主要元器件介绍 (13)1)8051 (13)2)共阴极数码管 (15)八、参考书籍 (17)一、摘要单片机是单片微型计算机,它是针对控制与检测应用而设计的,也称为微控制器。
它具有芯片体积小、集成度高、功能强、抗干扰能力强、性价比高等特点,被广泛的应用在工业自动化、仪器仪表、航天航空、消费电子、电力电子、汽车电子、计算机外设等领域。
自20世纪80年代MCS-51系列单片机问世以来,经历了三十多年的发展,在共享Inter公司8051内核技术的基础上,众多的半导体公司经过不断的技术更新,推出了庞大的系列兼容产品,使MCS-51系列单片机依然在各个应用领域扮演着重要的角色。
学习单片机的最有效方法就是理论与实践并重,需要更深的去了解单片机的很多功能,努力的去查找资料,当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
本课程通过应用单片机技术完成了流程灯、数码管显示以及4×4键盘的识别等功能。
二、设计要求(1)利用按键控制流水灯的显示。
(2)利用3×3或者4×4键盘,控制数码管的显示。
(3)利用到定时/计数器。
(4)利用到中断技术。
三、方案设计说明根据要求我们所采用的方案为:主程序为4×4键盘的扫描程序,通过P1口输入所按键的键值,将扫描到的键值“0~F”中的一位通过P0口在数码管上显示,并检测按键是否为“LED---”,如果不是,将回到程序继续扫描,如果是“LED---”,则跳到LED循环点亮。
朋友们大家好!感谢您购买启光电子STC15系列最小系统板耽误您几分钟请把以下的内容仔细阅读下谢谢首先强调下电子产品在运输过程中难免会出现点问题所以请收到板子的朋友不要着急去焊板子请先做下简单的烧录测试确定板子没有问题后在进行对板子的改动这样即使当板子出现问题我们也能更好的为您解决(包括退换)如果对板子进行焊接后测试出现问题我们只能提供帮助和技术支持但是此时就不能提供(退换)服务了希望朋友们能理解和支持!谢谢!如果着急使用请直接阅读下面的使用和下载方法开发板简介这款STC15F2K60S2 算是宏景(STC)在STC12的基础上的一个升级吧其实STC15早在两年前就一直说要出结果只是出了STC15F104E系列随后的STC12也将宏景的作品推向了高端不过管怎么说12比普通的8051要快12倍左右那STC15给我们又带来了什么呢这里我们只用它与STC12系列相比1 STC15虽然也是1T单片机但是它的速度要比STC12还要快20%左右2 STC15最闪亮的应该是它有内部晶振工作范围在5MHz—35MHz 这一点STC12是望尘莫及的3 PWM STC15位3通道而STC12为2路4 定时器/计数器STC156 STC12 45 串口方面均为双串口但是STC15可以通过切换使用分时复用的方法可以达到5个串口效果6RAM STC15 2K STC12 1K等等从以上这些不能看出STC15与STC12想比还是要胜出一筹最后希望它在你的手中能发挥的淋漓尽致!自动冷启动简介如果用我们板子的朋友一定知道我们板子有自动冷启动功能即不用重新开关只要保持板子供电状态就可以点击下载当然在STC15F2K60S2的板子上我们依然为它加了自动冷启动功能。
这里说一下自动冷气的开关问题如图在三极管M6的下面为自动冷启动设计了开关分别有左右两个框左边就一个字母K 右边能看到K G两个字母顾名思义K是开G 是关的意思也就是说在图上右边中间点和上边连焊并且左边也同时连焊就是开启自动冷启动功能中间点和下边连焊并且左边连点断开就是关闭自动冷启动功能为什么这样做呢因为如果要有一段时间调试程序开启自动冷启动会很方便如果调试完了要一直应用此程序就可以关闭冷启动降低总能量的消耗(虽然没用多少能量!)板子上的蓝灯和红灯简介红灯即靠近USB口的LED灯它为板子的电源指示灯也就是不管有没有开开关只要电源供电或者接好USB线板子上的红灯就会亮蓝灯为STC15运行指示灯它的所用IO为P5.5使用和下载方法1.要先给电脑安装驱动也就是PL-2303驱动这个要根据系统选择你的安装版本如果是W7系统建议直接用1.5.0驱动驱动安装好后应该还要进行重启按步骤执行即可2.安装KEIL编译软件这里我们给大家带的是KEIL4 版本也是目前最新的版本!安装后要用注册机注册一次然后就可以完全破解的3.当以上都弄好后就可以写一个自己想编译的程序并且生成HEX文件或者直接用我们资料的已经生成的HEX写入也可以4.得到HEX文件就可以下载到STC15中了这里要简单的说下打开下载软件在打开的对话框里选择好单片机的型号即STC15F2K60S2点击选择刚才编译好的HEX文件接下来将STC15系统板和电脑用USB连接如果驱动安装没有问题的话会在我的电脑设备管理器的端口上显示如图确定端口后在这里选择好已驱动成功的端口(我这里就是COM4)ps 其实这个不用查也没有关系新版的下载软件会自动搜索已经连接好的驱动接下来就是很重要的一点就是在最高和最低波特率选择里要尽量选择同样的波特率下载程序时才会比较稳定如图当一切准备好了以后看下板子的开关是不是处于开启的状态即波动开关拨到K位置头文件问题有的朋友可能还不太懂头文件(明白的朋友就不用浪费时间啦直接看头文件的安装方法)下面我就按我的理解简单给家解释一下说白了头文件就是驱动单片机的底层函数比如说P3口我们平时写程序时直接写P3=0xFF这样P3口的所有脚就都会拉高但这里面的P3就是在头文件里定义的!所以不管写什么样的单片机程序都要有它相应的头文件51单片机的头文件就是51.H我们在程序最上端只要加#include “reg51.h”就可以直接使用所以STC15F2K60S2也要有它的都文件当然了如果你要用51的头文件也能用必定STC15兼容51系列的所有功能但是STC15有自己的创新功能比如说AD通道的设置就要用到它自己的头文件头文件安装方法1首先要确定keil4 已经安装好2打开下载软件可以看到左边有一排对话框3 按动小箭头找到头文件选项这里就是stc15f2k60s2的整个头文件所在4选择选择上图然后点击确定这样整个的STC的头文件就安装到keil中了不妨我们可以去看一看这个STC文件夹就是刚安装的头文件里面的头文件有以上这些我们的板子是STC15F2K60S2所以我们选中它5然后复制然后返回INC文件夹并将刚才复制的STC15F2K60S2的头文件复制到INC文件夹的最下面里可以看出在INC文件夹里有很多.H文件也就是头文件把STC15F2K60S2复制到这里也方便了程序上的调用6这样做好后在程序上直接就可以了如果不把刚才的STC15头文件复制出来还要引用的话那就要这样不过都差不多看你喜欢哪一种方法若第一次在keil中创建项目在Keil中新建项目时选择芯片型号时,便会有“STC MCU Database”的选择项,如下图然后从列表中选择响应的MCU型号,所以我们在此选择“STC15F2K60S2”的型号,点击“确定”完成选择添加源代码文件到项目中,如下图:这里简单的介绍一下LCD1602 与 LCD12864的选择方式如图左上角 有三个焊点 中间点和左边连接 打开12864 和TFT功能 中间点和右边连接 打开1602功能并且这个STC15板子 多了可以加485芯片功能在对应的485焊盘上 焊好您要加的485 芯片 然后将图中485焊盘右边的 K 字母焊盘 和485芯片的第8脚 即对应K焊盘左边的焊盘连焊 就可以开起485芯片功能485所用单片机引脚 P3.0 P3.1 为串口P5.5为控制口这里的A B 就是485的输入输出口 如果接到485总线上 就可以进行485通讯了关于晶振和复位按键说明STC15F2K60S2有其内部R/C时钟及其复位功能但是它又同时支持外部晶振和外部复位其实相对而言外部晶振的稳定性要比内部高一些对于追求稳定性的项目来说用外部的晶振可能会更好一些所以在这里我们特意做了备用的外部晶振电路部分默认给大家带是22.1184MHz使用方法是上图晶振焊好的引脚附近都会有一个焊盘每一个焊盘都是直接连接到单片机的晶振输入口的如果是用外部晶振的时候就直接把晶振上下的焊盘和晶振引脚连接上即可同时下载程序时要把第一项的勾选去掉如上图这样就设置成了外部时钟复位按键也是同理在图中复位按键的右边也有个焊盘当用复位按键的时候将其用烙铁连接好即可同时在下载软件里的复位引脚做为I/O口勾选去掉如上图下载后重新上电就可以显示外部复位功能以上两个设置设置好以后下载第一次以后都要重新上电才能实现功能以后在下载就不用在重新上电了。
STC15F2K60S2-01-IO跑马灯(寄存器版)基本操作本文将以流水灯为例,对STC15F2K60S2单片机的普通IO口的基本操作进行详细介绍。
先看效果图:本例是通过控制开发板上D1、D2、D3、D4四个LED在一定时间内的亮与灭来实现流水灯的效果,下面我们来详细介绍一下实现的过程。
打开开发板原理图,找到D1、D2、D3、D4这四个LED硬件原理图:从原理图中,我们不难发现,只要分别给P16、P17、P47、P46这四个IO一个低电平,对应的LED就会被点亮。
那么怎么才能让STC15F2K60S2单片机这四个IO口输出低电平呢?虽然不简单,但也不是很复杂。
首先,我们需要来配置这四个IO口的模式,从芯片手册上我们可以知道,STC15F2K60S2单片机的所有I/O口均可由软件配置成4种工作类型之一,即:准双向口/弱上拉、推挽输出/强上拉、仅为输入(高阻)或开漏输出功能,每个口用2个控制寄存器中的相应位控制每个引脚的工作类型。
那么我们来先看P16、P17口,这两个IO口是在P1端口上,从STC提供的芯片手册上,我们可以看到P1口的配置如下:也就是说,P1口的四种工作类型,是通过设置P1M1、P1M0的值来确定的。
这里我们演示流水灯用的是普通输入输出功能,也就是我们需要将P1M1、P1M0都设置成0就可以了!同样,P46、P47也是一样的设置:在这里就偷下懒,直接把所有I/O口都设置成准双向口了。
说到这里,可能有人会有疑惑:如果我只需要将某个I/O口设置成准双向口,其他的I/O口要用作别的功能,那该怎么设置呢?这个很简单,我们只需要按位设置。
举个例子,如果我们有这么一个需求,需要将P1.7为开漏,P1.6为强推挽输出,P1.5为高阻输入,其余I/O口均为准双向口,那么我们只需要如下设置即可:P1M1 = 10100000B;P1M0 = 11000000B;还需要提醒一下,虽然STC15F2K60S2单片机的每个I/O口在弱上拉/强推挽输出/开漏模式时,都能承受20mA的灌电流(还是要加限流电阻,如1K,560R,472R 等),在强推挽输出时能输出20mA的拉电流(也要加限流电阻),但整个单片机的工作电流推荐不要超过90mA,即从MCU-VCC流入的电流建议不要超过90mA,从MCU-GND流出电流建议不要超过90mA,整体流出/流出电流建议都不要超过90mA。
单片机论文之流水灯及数码管控制解析用单片机控制流水灯及数码管目录课程设计目录 (1)课程设计摘要 (2)正文 (3)课程设计涉及的知识及所需平台 (3)元件介绍 (9)电路设计及分析 (12)程序设计 (14)调试运行 (21)设计心得 (23)参考文献 (24)一:课程设计摘要设计摘要设计要求:利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减至765398并保持显示此数,与此同时利用定时器0以500MS的速度进行流水灯从上到下的移动,当数码管上的数减到停止时,流水灯也停止然后全部闪烁,3秒后(用T0定时)流水灯全部关闭,数码管上显示“HELLO”,到此保持住。
设计说明:数码管的动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管的“位选端有效”,并送出相应的字型显示编码。
此时其他位的数码管因位选端无效而都处于熄灭状态;下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,按此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。
通过定时器可以控制单片机上的数码管以及流水灯的显示时间,从而达到设计的要求。
关键词:单片机,数码管,动态显示,流水灯,定时器设计目的以AT89C52单片机为核心,制作一个数码管和流水灯互相配合显示的器件。
巩固加深对AT89C52单片机的认识,学会用AT89C52设计最小系统,并由此拓展运用单片机实现其他功能的设计。
设计引言单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
实验一流水灯实验一、实验目的1)简单 I/O 引脚的输出2)掌握软件延时编程方法3)简单按键输入捕捉判断二、实验实现的功能1)开机是点亮 12 发光二极管,闪耀三下2)依据顺时针循环挨次点亮发光二极管3)经过按键将发光二极管的显示改为顺逆时针方式三、系统硬件设计流水灯原理图四、系统软件设计演示程序按键正转闪耀反转五、实验过程中碰到的问题及解决方法1) 每次循环不论正转仍是反转程序,总先是先履行P1 口的 8 位 led 灯。
原由:在利用 KEIL 自带的库函数中的 _crol_ 和_cror_ 时,在正转和反转程序中应当调动次序的,开始没注意到。
更正后显示正常。
2)在开始实验的时候推行的是向来循环的方式,利用按键嵌套。
以后发现不理想,每次按键按到三次以上后进入死循环。
解决方案:利用一个按键,显示一次。
并加入按键开释,防备误动作。
指导老师署名:日期:实验一程序 :/******************************************************************** **************工程说明:本工程主要达成了一下功能:1,复位后演示全部功能2,灯闪耀三次3,流水灯正转4,流水灯反转函数说明:yanshi() :演示程序dengss() :闪耀程序right():正转程序left():反转程序scankey() :按键扫描********************************************************************* **************/#ifndef _led_h#define _led_h#define uint unsigned int#define uchar unsigned charuchar i,j,a,b,c,d;uchar flag=0;//亮灯判断标记uchar aa,bb,cc,dd,ss;sbit H1=P3^6;sbit key1=P0^5;sbit key2=P0^6;sbit key3=P0^7;void delay(uint);//1ms 延时void yanshi(void);//演示全部亮灯方式void dengss(void);//闪耀三次void left(void); //左循环亮灯void right(void);//右循环亮灯void scankey(); //按键扫描#endif#include"stc10.h"#include<intrins.h>#include<led.h> //包含各样变量定义及函数申明main(){yanshi();delay(2000); //两秒后进入可控大循环while(1){scankey();if(flag==0)right();if(flag==1)left();if(flag==2)dengss();}}void delay(uint x){uint i,j;for(i=110;i>0;i--)for(j=x;j>0;j--);}void yanshi(){dengss();right();left();P2=0XFF;P3=0XFF;}void dengss(){for(ss=3;ss>0;ss--)P2=0;P3=0xc3;delay(1000);P2=0xff;P3=0xff;delay(1000);}flag+=3;//退出小循环,只亮一次,增大按键扫描频次}void right(){aa=0xfe;for(a=8;a>0;a--){P2=aa;aa=_crol_(aa,1);delay(500);}bb=0xfb;P2=0xff;//熄灭循环后亮着的for(b=4;b>0;b--){P3=bb;bb=_crol_(bb,1);delay(500);}//D12 保存发亮flag+=3;//退出小循环,只亮一次,增大按键扫描频次}void left(){cc=0xdf;for(c=4;c>0;c--){P3=cc;cc=_cror_(cc,1);delay(500);P3=0xff;// 熄灭 D9dd=0x7f;for(d=8;d>0;d--){P2=dd;dd=_cror_(dd,1);delay(500);}//D1 保存发亮flag+=3;//退出小循环,只亮一次,增大按键扫描频次}void scankey(){H1=0;if(key1==0){delay(10);if(key1==0){flag=0;while(!key1);//等候按键开释}}if(key2==0){delay(10);if(key2==0){flag=1;while(!key2);//等候按键开释}}if(key3==0){delay(10);if(key3==0){flag=2;while(!key3);//等候按键开释}}}实验二准时器或实不时钟实验一、实验目的1)数码管动向显示技术2)准时器的应用3)按键功能定义二、实验实现的功能1) 经过按键能够设定准不时间,启动准时器,准不时间到,让12 个发光二极管闪耀,达成准时器功能。
#include <reg52.h>
#include "typedef.h"
#include "led.h"
#include "dig.h"
#define uchar unsigned char
#define uint unsigned int
sbit LED1 = P0^0;
sbit LEDLE = P2^5; //设置U4锁存器
sbit SEGLE = P2^7; //设置U6锁存器,数码管位选
void LED1_Light();
void Run_LED();
sbit DIGLE = P2^6; //设置U7锁存器,进行数码管的段选
void delay(uint a)
{
uint i,j;
for(i = 0;i < 999;i++)
{
for(j = 0;j < a;j++)
{
}
}
}
void LED1_Light()
{
LEDLE = 1; //关闭U4锁存器,对数据透明(即输出同步),从而控制LED灯SEGLE = 0; //使能U6锁存器,关闭七段码数码管
while(1)
{
LED1 = 0;
}
}
void Run_LED()
{
LEDLE = 1; //关闭U4锁存器,控制LED灯
SEGLE = 0; //使能U6锁存器,禁止七段码数码管显示
P0 = 0xFE;
while(1)
{
delay(300);
P0 = P0 << 1;
P0 |= 0x01;
if(P0 == 0xFF)
P0 = 0xFE;
}
}
uchar const dig[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数字0~9的段选uchar code seg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //六位位选
void Digital_Tube()
{
uint i,j;
i = 0;
j = 0;
P0 = 0xFF; //关闭LED灯
LEDLE = 0; //使能U4锁存器,不让LED灯显示
while(1)
{
P0 = seg[i];
SEGLE = 1; //U6锁存器失能,对数据是透明的
SEGLE = 0; //U6锁存器使能,锁存住位选内容
P0 = dig[j];
DIGLE = 1;
DIGLE = 0;
i++;
j++;
if(i == 6)
i = 0;
if(j == 10)
j = 0;
delay(300);
}
}
void main(void)
{
// LED1_Light(); //一个LED灯亮
// Run_LED(); //流水灯Digital_Tube(); //数码管
}。