标题: 单片机流水灯实验指导书 [打印本页]

作者: 51单片机巫妖    时间: 2018-2-11 19:55
标题: 单片机流水灯实验指导书
单片机流水灯实验指导
一、知识准备

STC89C52RC单片机共有4个双向的8位并行I/O端口,片内I/O端口作为输出使用时,最常用的应用控制是相应的I/O引脚上的LED点亮与熄灭。

1.P11.1 位电路结构

由三部分组成:

   (1)1个数据输出锁存器,用于输出数据位的锁存;

   (2)2个三态的数据输入缓冲器BUF1和BUF2,用于读锁存数据和读引脚数据的输入缓冲;

   (3)输入驱动电路,由1个场效应管(FET)和1个片内上拉电阻组成。

     P1口某一位的位电路结构如下图所示:

                                图1-1

1.2工作过程分析

P1口只能作为通用的I/O口使用。

(1)P1口作为输出口时,若CPU输出1,Q=1,Q*=0,场效应管截止,P1口引脚的输出为1;若CPU输出0,Q=0,Q*= 1,场效应管导通,P1口引脚的输出为0。

(2)P1口作为输入口时,分为“读锁存器”和“读引脚”两种方式。“读锁存器”时,锁存器的输出端Q的状态经输入缓冲器BUF1进入内部总线;“读引脚”时,先向锁存器写1,使场效应管截止,P1.x引脚上的电平经输入缓冲器BUF2进入内部总线。

1.3 P1口特点

P1口由于有内部上拉电阻,没有高阻抗输入状态,故为准双向口。作为输出口时,不需要在片外接上拉电阻。

P1口“读引脚”输入时,必须先向锁存器写入1。

2.循环移位原理

循环移位法是采用循环程序结构进行编程。我们在程序一开始就给 P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果了。

3.接口芯片

本项目选择的扩展I/O芯片是74HC595。74HC595芯片是一种串入并出的芯片,有8位串行输入/输出或者并行输出移位寄存器,具有高阻、关、断三态。

下表说明了74HC595芯片的引脚功能。

                           图1-2

接口电路图如下,可以看到U4中Q0-Q7接LED,U5Q0-Q7接矩阵。

                           图1-3

                          图 1-4

SDI为数据输入引脚,与11、12引脚都接51单片机。SDO引脚为数据输出。

二、实验目的

掌握流水灯系统的基本组成以及工作原理。使设计出来的流水灯达到设计任务书的技术要求。

三、实验内容

扩展I/O口,连接8个LED,编写程序使其从右到左的流水方式点亮。

四、实验设备

硬件设备:51单片机开发版、USB线一根,12v电源适配器一个。

图1-3

软件工具:STC-ISP-15XX-V6.82,keil。

五、核心代码
  1.    /**
  2.   * @Global Varible Declare
  3.   * @全局变量声明
  4.   */
  5. /*流水灯实验对应的编码led1 led2 led3 led4 led5 led6 led7 led8 */
  6. uchar LED_tabl[10] = {0xFD,0xFB,0xFE,0xF7,0xBF,0xEF,0x7F,0xDF};
  7. /**
  8.   * @brief      main
  9.   * @details    主函数
  10.   * @param a    无
  11.   * @param b    无
  12.   * @retval     无
  13.   */
  14. void Main()

  15. {
  16.     uchar i;            /*定义一个循环变量*/
  17.     init_595();         /*初始化IO扩展芯片74HC595*/
  18.     while(1)
  19.     {  
  20.         /*开发板上使用的是两片595芯片级联,构成一个16位的串入并出接口

  21.          *板上8个LED灯连接在595的低八位数据线上,为了不影响其他电路,
  22.          *需要把高八位置为高电平*/
  23.         for(i=0;i<8;i++)
  24.         {
  25.             WR_595(0xff);           /*写入16位数据的高八位*/  
  26.             WR_595(LED_tabl[i]);    /*写入16位数据的低八位,这里使用查表法,以此输出对应每一个LED的值,实现流水灯操作*/
  27.             OUT_595();              /*给595的RCK写入时钟信号,串行数据移位输出*/
  28.             delay_ms(500);          /*延时500MS*/  
复制代码


、实验步骤

连接设备,将USB线一端接PC,一端接单片机开发板,开发板接12V电源,打开电源开关

图1-4

打开STC-ISP下载工具

图1-4

选择好单片机型号STC89C52RC,扫描串口号,其他设置为默认;然后点击打开程序文件,出现下图

图1-5

进入目录obj,选择需要下载的hex文件打开;关闭电源→点击下载/编辑→打开电源,程序开始下载,出现下图则操作成功

图1-6

、实验验证

将开发板电源关闭,然后再打开,查看板上8个LED是否按流水的方式依次从右到左点亮,如果来回循环点亮则说明实验成功。

(1)思考题1是否可以让8个LED灯跳着点亮?

(2)思考题2从左到右依次点亮是否也可以做到,怎么编写?



完整的Word格式单片机流水灯实验指导书文档51黑下载地址:

流水灯.doc (4.87 MB, 下载次数: 6)









欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1