找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1550|回复: 2
打印 上一主题 下一主题
收起左侧

如何使用mplab实现pic16f887芯片的流水灯实验 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:502115 发表于 2019-4-1 02:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何使用mplab实现pic16f887芯片的流水灯实验!
要求从上到下逐个点亮,从下岛上逐个熄灭,上下逐个往中间点亮,从中间往外围熄灭

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:499770 发表于 2019-4-1 09:11 | 只看该作者
比如8位的,高电平是点亮,你用一个字节,把每次变化的对应位置1,再间隔传到端口,就能实现了
回复

使用道具 举报

板凳
ID:18297 发表于 2019-4-1 09:32 | 只看该作者
  1. #include"sys.h"
  2. #include <stdint.h>
  3. #include <stdbool.h>
  4. #include <stdio.h>
  5. uint8_t disp_buff=0;
  6. #define LED_OUTPUT PORTD
  7. uint8_t i=0;
  8. uint8_t disp_tabA[8]={0b0000000,0b10000001,0b11000011,0b11100111,0b11111111};
  9. void main()
  10. {
  11.     TRISD=0;
  12.     LED_OUTPUT=0;   
  13.     while(1)
  14.     {
  15.         for(i=0;i<8;i++)
  16.         {
  17.             disp_buff=(uint8_t)((disp_buff<<1)+1);       //右移加1 实现逐个点亮
  18.             LED_OUTPUT=disp_buff;
  19.             __delay_ms(500);
  20.         }      
  21.         for(i=0;i<8;i++)
  22.         {
  23.             disp_buff=(uint8_t)(disp_buff>>1);          //左移,实现逐个灭灯
  24.             LED_OUTPUT=disp_buff;
  25.             __delay_ms(500);
  26.         }
  27.         for(i=0;i<5;i++)
  28.         {
  29.             LED_OUTPUT=disp_tabA[i];                   //由disp_tabA[0]---disp_tabA[5]依次旁边向中间点亮
  30.             __delay_ms(500);
  31.         }
  32.          for(i=0;i<5;i++)
  33.         {
  34.             LED_OUTPUT=disp_tabA[(uint8_t)(4-i)];      //由disp_tabA[5]---disp_tabA[0]依次旁边向中间到两边逐渐灭灯
  35.             __delay_ms(500);
  36.         }
  37.         
  38.     }
  39. }
复制代码

  1. // PIC16F887 Configuration Bit Settings

  2. // 'C' source line config statements

  3. // CONFIG1
  4. #pragma config FOSC = INTRC_NOCLKOUT// Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
  5. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
  6. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  7. #pragma config MCLRE = OFF      // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD)
  8. #pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
  9. #pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
  10. #pragma config BOREN = ON       // Brown Out Reset Selection bits (BOR enabled)
  11. #pragma config IESO = OFF       // Internal External Switchover bit (Internal/External Switchover mode is disabled)
  12. #pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)
  13. #pragma config LVP = ON         // Low Voltage Programming Enable bit (RB3/PGM pin has PGM function, low voltage programming enabled)

  14. // CONFIG2
  15. #pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
  16. #pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)

  17. // #pragma config statements should precede project file includes.
  18. // Use project enums instead of #define for ON and OFF.

  19. #include <xc.h>
  20. #define _XTAL_FREQ  16000000
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表