了解到RA等引脚需要关闭AC比较器变成数字引脚后才能使用。
引脚默认有高阻态,高电平和低电平,所以检测电平引脚接一个10K电阻和5V电压连,接一个水银开关和地连。
水银开关横向摆放时,从左向右摇动时,水银在最左边,反之右边,已测试效果不是很差。
PIC 高灌/ 拉电流25 mA/25 mA,故引脚用1K电阻驱动LED即可。
RAM地址分BANK1、BANK2,定义在不同BANK的变量函数也要注明如void hanshu(bank2 u8 *aaray)。
//*aaray即为数组地址或者指针指向地址
对于指针来说寻址时的跨度可以从BANK0到BANK1,从BANK2到BANK3,而不可以从BANK1到BANK2。
数组定义前加上CONST即为存入ROM中,以及为什么ROM读取数据错误需要解决:已解决CONST的数组也需要新建一个函数如bank2一样,如void hanshu(const u8 *aaray)。
用指针读取未验证因为读取数组数据时一直用数组直接读取,未证实读取存于ROM的数据是否需要const unsigned char *romPtr这种指针,如下知识点:

const数组必须用const指针访问

指向ROM 常数的指针

如果一组变量是已经被定义在ROM 区的常数,那么指向它的指针可以这样定义:

const unsigned char company[]=”Microchip”; //定义ROM 中的常数

const unsigned char *romPtr; //定义指向ROM 的指针

程序中可以对上面的指针变量赋值和实现取数操作:

romPtr = company; //指针赋初值

data = *romPtr++; //取指针指向的一个数,然后指针加1

反过来,下面的操作将是一个错误,因为该指针指向的是常数型变量,不能赋值。

*romPtr = data; //往指针指向的地址写一个数

视频逐帧查看软件VirtualDub
#include<pic.h>
//#include <pic18.h>

__CONFIG (0x1F72);//此适用于16F

//#define  CW  RB6 
//#define  CLOCK  RB7

/*#define  LED1ON     PORTA&=0xFE//
#define  LED1OFF   PORTA|=0x01 // PA0
#define  LED2ON     PORTA&=0xFD//
#define  LED2OFF   PORTA|=0x02 // PA1
#define  LED3ON     PORTA&=0xFB//
#define  LED3OFF   PORTA|=0x04 // PA2
#define  LED4ON     PORTA&=0xF7//
#define  LED4OFF   PORTA|=0x08 // PA3
#define  LED5ON     PORTA&=0xDF//
#define  LED5OFF   PORTA|=0x20 // PA5
#define  LED6ON     PORTC&=0xFD//
#define  LED6OFF   PORTC|=0x02 //PC1
#define  LED7ON     PORTC&=0xFB//
#define  LED7OFF   PORTC|=0x04 //PC2
#define  LED8ON     PORTC&=0xF7//
#define  LED8OFF   PORTC|=0x08 //PC3
#define  LED9ON     PORTC&=0xEF//
#define  LED9OFF   PORTC|=0x10 //PC4
#define  LED10ON    PORTC&=0xDF//
#define  LED10OFF   PORTC|=0x20 //PC5
#define  LED11ON    PORTC&=0xBF//
#define  LED11OFF   PORTC|=0x40//PC6 
#define  LED12ON    PORTC&=0x7F//
#define  LED12OFF   PORTC|=0x80 //PC7
#define  LED13ON    PORTB&=0xFD//
#define  LED13OFF   PORTB|=0x02 //PB1
#define  LED14ON    PORTB&=0xFB//
#define  LED14OFF   PORTB|=0x04 //PB2
#define  LED15ON    PORTB&=0xEF//
#define  LED15OFF   PORTB|=0x10 //PB4
#define  LED16ON    PORTB&=0xDF//
#define  LED16OFF   PORTB|=0x20 //PB5
#define LED17OFF asm("BCF PORTC,0x1")
*/
#define  LED1 RA0;
#define  LED2 RA1;
#define  LED3 RA2;
#define  LED4 RA3;
#define  LED5     RA5;
#define  LED6     RC1;
#define  LED7     RC2;
#define  LED8     RC3;
#define  LED9     RC4;
#define  LED10    RC5;
#define  LED11    RC6;
#define  LED12    RC7;
#define  LED13    RB1;
#define  LED14    RB2;
#define  LED15    RB4;
#define  LED16    RB5;
typedef unsigned char    u8; 
unsigned char in=0;
const unsigned char *romPtr;

void delay_us(unsigned char delay_count)
{
  unsigned char j;                         
  for(j=delay_count;j>0;j--); 
}

void delay_ms(unsigned char delay_count)
{
  unsigned char i;                         
  for(i=delay_count;i>0;i--)
  {
delay_us(250);
delay_us(250);
delay_us(250);
delay_us(250);
  } 
}
unsigned char  hanzi[] = 
{
0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,
0x08,0x08,0x07,0xF0,
};
bank1 unsigned char  hanzi1[32] = 
{
0x10,0x82,0x11,0x01,0xFF,0xFE,0x12,0x02,0x15,0x0C,0x3F,0xF0,0x69,0x42,0xA5,0x21,
0x3F,0xFE,0x03,0x02,0x7D,0x84,0x41,0x68,0x41,0x18,0x7D,0x66,0x05,0x84,0x00,0x00,
};
bank1 unsigned char  hanzi2[32] = 
{
0x08,0x01,0x08,0xC2,0x0F,0x44,0xF8,0x28,0x08,0x30,0x0F,0xCE,0x01,0x04,0x41,0x00,
0x41,0x02,0x41,0x01,0x4F,0xFE,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x00,0x00,
};

bank2 unsigned char  hanzi3[32] = 
{
0x40,0x40,0x41,0x80,0x4F,0xFE,0x72,0x08,0x43,0xFC,0x42,0x00,0x12,0x00,0x12,0x40,
0x13,0xC8,0xFE,0x44,0x12,0x4A,0x12,0x50,0x12,0x60,0x12,0x00,0x02,0x00,0x00,0x00,
};

const unsigned char  hanzic1[32] = 
{
0x10,0x82,0x11,0x01,0xFF,0xFE,0x12,0x02,0x15,0x0C,0x3F,0xF0,0x69,0x42,0xA5,0x21,
0x3F,0xFE,0x03,0x02,0x7D,0x84,0x41,0x68,0x41,0x18,0x7D,0x66,0x05,0x84,0x00,0x00,
};
const unsigned char  hanzic2[32] = 
{
0x08,0x01,0x08,0xC2,0x0F,0x44,0xF8,0x28,0x08,0x30,0x0F,0xCE,0x01,0x04,0x41,0x00,
0x41,0x02,0x41,0x01,0x4F,0xFE,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x00,0x00,
};
const unsigned char  hanzic3[32] = 
{
0x40,0x40,0x41,0x80,0x4F,0xFE,0x72,0x08,0x43,0xFC,0x42,0x00,0x12,0x00,0x12,0x40,
0x13,0xC8,0xFE,0x44,0x12,0x4A,0x12,0x50,0x12,0x60,0x12,0x00,0x02,0x00,0x00,0x00,
};

void displayword(u8 *aaray);
void displaywordfan(u8 *aaray);
void displayword1(bank2 u8 *aaray);
void displaywordfan1(bank2 u8 *aaray);
void displaywordc1(const u8 *aaray);
void displaywordfanc1(const u8 *aaray);
void main()
{
//unsigned char i,j,p=0,a;
//unsigned int i,*p;
//INTCON|=0x90;//设置全局中断使能,INT/RB0中断使能
//OPTION_REG=0x80;
 u8 *p;
//FSR=0;
//INDF=0;
ADCON1=0x07;
TRISB=0xC9;
TRISA=0;
TRISC=0;
RA0=1;
RA1=1;
RA2=1;
RA3=1;
RA5=1;
RC1=1;
RC2=1;
RC3=1;
RC4=1;
RC5=1;
RC6=1;
RC7=1;
RB1=1;
RB2=1;
RB4=1;
RB5=1;
while(1)
{
//if(RB0==0)
//{
/*for(j=0;j<=7;j++)

if(p>11)p=0;
i=hanzi[p];
RA0=1-(i>>7);
RA1=1-((i&0x7F)>>6);
RA2=1-((i&0x3F)>>5);
RA3=1-((i&0x1F)>>4);
RA5=1-((i&0x0F)>>3);
RC1=1-((i&0x07)>>2);
RC2=1-((i&0x03)>>1);
RC3=1-(i&0x01);
p++;
i=hanzi[p];
p++;
RC4=1-(i>>7);
RC5=1-((i&0x7F)>>6);
RC6=1-((i&0x3F)>>5);
RC7=1-((i&0x1F)>>4);
RB1=1-((i&0x0F)>>3);
RB2=1-((i&0x07)>>2);
RB4=1-((i&0x03)>>1);
RB5=1-(i&0x01);
delay_ms(15);
};*/

/*
if(RB0==0)
{
//p=hanzi1;
displayword(hanzi1);
//p=hanzi2;
displayword(hanzi2);
//displayword(&hanzi3[0]);
displayword1(hanzi3);
}
if(RB0==1)
{
//displayword(&hanzi3[0]);
//p=hanzi2;
displaywordfan1(hanzi3);
displaywordfan(hanzi2);
//p=hanzi1;
displaywordfan(hanzi1);
}
*/

if(RB0==0)
{
//p=hanzi1;
displaywordc1(hanzic1);
//p=hanzi2;
displaywordc1(hanzic2);
//displayword(&hanzi3[0]);
displaywordc1(hanzic3);
}
if(RB0==1)
{
//displayword(&hanzi3[0]);
//p=hanzi2;
displaywordfanc1(hanzic3);
displaywordfanc1(hanzic2);
//p=hanzi1;
displaywordfanc1(hanzic1);
}

}
}

void displayword(u8 *aaray)
{
u8 j,i,p=0;
for(j=0;j<=15;j++)
{
if(p>31)p=0;
i=aaray[p];
RA0=1-(i>>7);
RA1=1-((i&0x7F)>>6);
RA2=1-((i&0x3F)>>5);
RA3=1-((i&0x1F)>>4);
RA5=1-((i&0x0F)>>3);
RC1=1-((i&0x07)>>2);
RC2=1-((i&0x03)>>1);
RC3=1-(i&0x01);
p++;
i=aaray[p];
p++;
RC4=1-(i>>7);
RC5=1-((i&0x7F)>>6);
RC6=1-((i&0x3F)>>5);
RC7=1-((i&0x1F)>>4);
RB1=1-((i&0x0F)>>3);
RB2=1-((i&0x07)>>2);
RB4=1-((i&0x03)>>1);
RB5=1-(i&0x01);
delay_ms(3);
}
}

void displaywordfan(u8 *aaray)
{
u8 j,i,p=31;
for(j=0;j<=15;j++)
{
if(p==0xff)p=31;
i=aaray[p];
RC4=1-(i>>7);
RC5=1-((i&0x7F)>>6);
RC6=1-((i&0x3F)>>5);
RC7=1-((i&0x1F)>>4);
RB1=1-((i&0x0F)>>3);
RB2=1-((i&0x07)>>2);
RB4=1-((i&0x03)>>1);
RB5=1-(i&0x01);
p--;
i=aaray[p];
p--;
RA0=1-(i>>7);
RA1=1-((i&0x7F)>>6);
RA2=1-((i&0x3F)>>5);
RA3=1-((i&0x1F)>>4);
RA5=1-((i&0x0F)>>3);
RC1=1-((i&0x07)>>2);
RC2=1-((i&0x03)>>1);
RC3=1-(i&0x01);
delay_ms(3);
}
}

void displaywordc1(const u8 *aaray)
{
u8 j,i,p=0;
for(j=0;j<=15;j++)
{
if(p>31)p=0;
i=aaray[p];
RA0=1-(i>>7);
RA1=1-((i&0x7F)>>6);
RA2=1-((i&0x3F)>>5);
RA3=1-((i&0x1F)>>4);
RA5=1-((i&0x0F)>>3);
RC1=1-((i&0x07)>>2);
RC2=1-((i&0x03)>>1);
RC3=1-(i&0x01);
p++;
i=aaray[p];
p++;
RC4=1-(i>>7);
RC5=1-((i&0x7F)>>6);
RC6=1-((i&0x3F)>>5);
RC7=1-((i&0x1F)>>4);
RB1=1-((i&0x0F)>>3);
RB2=1-((i&0x07)>>2);
RB4=1-((i&0x03)>>1);
RB5=1-(i&0x01);
delay_ms(3);
}
}

void displaywordfanc1(const u8 *aaray)
{
u8 j,i,p=31;
for(j=0;j<=15;j++)
{
if(p==0xff)p=31;
i=aaray[p];
RC4=1-(i>>7);
RC5=1-((i&0x7F)>>6);
RC6=1-((i&0x3F)>>5);
RC7=1-((i&0x1F)>>4);
RB1=1-((i&0x0F)>>3);
RB2=1-((i&0x07)>>2);
RB4=1-((i&0x03)>>1);
RB5=1-(i&0x01);
p--;
i=aaray[p];
p--;
RA0=1-(i>>7);
RA1=1-((i&0x7F)>>6);
RA2=1-((i&0x3F)>>5);
RA3=1-((i&0x1F)>>4);
RA5=1-((i&0x0F)>>3);
RC1=1-((i&0x07)>>2);
RC2=1-((i&0x03)>>1);
RC3=1-(i&0x01);
delay_ms(3);
}
}

void displayword1(bank2 u8 *aaray)
{
u8 j,i,p=0;
for(j=0;j<=15;j++)
{
if(p>31)p=0;
i=aaray[p];
RA0=1-(i>>7);
RA1=1-((i&0x7F)>>6);
RA2=1-((i&0x3F)>>5);
RA3=1-((i&0x1F)>>4);
RA5=1-((i&0x0F)>>3);
RC1=1-((i&0x07)>>2);
RC2=1-((i&0x03)>>1);
RC3=1-(i&0x01);
p++;
i=aaray[p];
p++;
RC4=1-(i>>7);
RC5=1-((i&0x7F)>>6);
RC6=1-((i&0x3F)>>5);
RC7=1-((i&0x1F)>>4);
RB1=1-((i&0x0F)>>3);
RB2=1-((i&0x07)>>2);
RB4=1-((i&0x03)>>1);
RB5=1-(i&0x01);
delay_ms(3);
}
}

void displaywordfan1(bank2 u8 *aaray)
{
u8 j,i,p=31;
for(j=0;j<=15;j++)
{
if(p==0xff)p=31;
i=aaray[p];
RC4=1-(i>>7);
RC5=1-((i&0x7F)>>6);
RC6=1-((i&0x3F)>>5);
RC7=1-((i&0x1F)>>4);
RB1=1-((i&0x0F)>>3);
RB2=1-((i&0x07)>>2);
RB4=1-((i&0x03)>>1);
RB5=1-(i&0x01);
p--;
i=aaray[p];
p--;
RA0=1-(i>>7);
RA1=1-((i&0x7F)>>6);
RA2=1-((i&0x3F)>>5);
RA3=1-((i&0x1F)>>4);
RA5=1-((i&0x0F)>>3);
RC1=1-((i&0x07)>>2);
RC2=1-((i&0x03)>>1);
RC3=1-(i&0x01);
delay_ms(3);
}
}

/*void interrupt ISR(void)
{
   //if(T0IE & T0IF)
    //   {
    //       T0IF = 0;
           //处理函数
    //    }
//nop();
;
if(INTF==1)
{
INTF=0;
in++;
if(in==2)in=0;
if(in==0)
{
TRISB=0xFF;
TRISA=0xFF;
TRISC=0xFF;
}
if(in==1)
{
TRISB=0xC9;
TRISA=0;
TRISC=0;
}
}
}*/

/* LED1ON;
delay_ms(250);
LED1OFF;
delay_ms(250);
LED2ON;
delay_ms(250);
LED2OFF;
delay_ms(250);
LED3ON;
delay_ms(250);
LED3OFF;
delay_ms(250);
LED4ON;
delay_ms(250);
LED4OFF;
delay_ms(250);
LED5ON;
delay_ms(250);
LED5OFF;
delay_ms(250);
LED6ON;
delay_ms(250);
LED6OFF;
delay_ms(250);
LED7ON;
delay_ms(250);
LED7OFF;
delay_ms(250);
LED8ON;
delay_ms(250);
LED8OFF;
delay_ms(250);
LED9ON;
delay_ms(250);
LED9OFF;
delay_ms(250);
LED10ON;
delay_ms(250);
LED10OFF;
delay_ms(250);
LED11ON;
delay_ms(250);
LED11OFF;
delay_ms(250);
LED12ON;
delay_ms(250);
LED12OFF;
delay_ms(250);
LED13ON;
delay_ms(250);
LED13OFF;
delay_ms(250);
LED14ON;
delay_ms(250);
LED14OFF;
delay_ms(250);
LED15ON;
delay_ms(250);
LED15OFF;
delay_ms(250);
LED16ON;
delay_ms(250);
LED16OFF;
delay_ms(250);

LED1ON;
LED2ON;
LED3ON;
LED4ON;
LED5ON;
LED6ON;
LED7ON;
LED8ON;
LED9ON;
LED10ON;
LED11ON;
LED12ON;
LED13ON;
LED14ON;
LED15ON;
LED16ON;

delay_ms(250);
delay_ms(250);
delay_ms(250);

LED1OFF;
LED2OFF;
LED3OFF;
LED4OFF;
LED5OFF;
LED6OFF;
LED7OFF;
LED8OFF;
LED9OFF;
LED10OFF;
LED11OFF;
LED12OFF;
LED13OFF;
LED14OFF;
LED15OFF;
LED16OFF;
*/

基于PIC16F876A的摇摇棒相关推荐

  1. led version 2.0 摇摇棒编程软件c 语言,基于单片机控制LED摇摇棒的解决方案 - 全文...

    摇摇棒本为开发套件,全部采用直插的器件.显示的LED采用了5mm超高亮30度聚光发光二极管,共 32只.控制芯片采用宏晶单片机STC11F03E,其内部有3K的程序存储空间,256字节的数据存储空间, ...

  2. 基于ADXL345的 LED摇摇棒原理

    1.     LED摇摇棒原理 LED摇摇棒可以通过左右摇动而显示出自己定义的字符,这是利用了人的视觉停留原理.基于ADXL345的LED摇摇棒的实现,主要是根据G_sensor所产生的数据来触发显示 ...

  3. 51单片机系列——基于单片机的蓝牙LED摇摇棒设计

    设计一个机遇基于LED的显示棒,其中LED等必须呈线性排列,并至少使用16只: 摇动显示棒是形成的亮灯扇形区域能让人分辨出字符,并用按键实现显示的切换: 可以显示英文及汉字并至少显示四种模式. 摇摇棒 ...

  4. 51摇摇棒的简介与改字详解

    51摇摇棒:"摇摇棒"是基于人的视觉暂留原理的,通过分时刷新16个发光二极管来显示输出文字或图案等信息的显示装置.输出信号频率的控制通过单片机来实现,用摇动传感器检测当前摇动状态. ...

  5. 蓝牙控制摇摇棒(电子综合设计)

    蓝牙控制摇摇棒 经过三周的努力,蓝牙控制摇摇棒已经完成,在此过程中收获良多.选择这个题目的原因 是摇摇棒是很不错的一个玩具,再加上蓝牙的交互,可以随心所欲的控制摇晃的内容,趣味性 很强,这也是我选择做 ...

  6. 实例源码2---基于51单片机的摇摇棒制作

    最近整理资料,看见这个之前做的摇摇棒,是基于51单片机的,下面把源程序贴出来,有任何问题欢迎留言! #include #define uchar unsigned char #define uint ...

  7. 基于2D-RNN的鲁棒行人跟踪

    基于2D-RNN的鲁棒行人跟踪 Recurrent Neural Networks RNN 行人跟踪 读"G.L. Masala, et.al., 2D Recurrent Neural N ...

  8. 摇摇棒C语言程序,摇摇棒代码C语言.doc

    摇摇棒代码C语言 /**************************************************************************** * * ********* ...

  9. android 摇摇棒 之surfaceView vs. View--第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇...

    第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇 我的主题是: Android 应用程序开发经验 一直做的是嵌入式C/C++(Qt)语言开发,Java看了一个月,没想 ...

最新文章

  1. VS2008环境下CEGUI 0.7.1及相关工具的编译(转载 + 额外的注意事项)
  2. 初学Flink,对Watermarks的一些理解和感悟(透彻2)
  3. ZooKeeper小结
  4. S/4 HANA – 是ERP皇帝的新装,还是SAP王国的新基石
  5. 固态硬盘开卡软件_有一种软件号称能让固态硬盘速度飞起,到底靠不靠谱?
  6. Mysql学习总结(38)——21条MySql性能优化经验
  7. 打造IOS移动***测试平台
  8. 现在最简单的赚钱套路
  9. 微博热榜排行榜zset
  10. 屏蔽五项网络功能 让XP系统极速狂飙
  11. GeoServer的安装与数据服务发布
  12. 两层循环的中断,注意中断退出
  13. c语言基础知识scanf,C语言基础之scanf函数的使用
  14. ic 卡获取帐号apdu指令_APDU指令格式解析
  15. Qt: Exception at 0x7ff8082c4f69, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be ...
  16. CSS3阴影 box-shadow的使用和技巧总结
  17. Android性能优化第(七)篇---StrickMode严苛模式检测耗时与内存问题
  18. Android 如何令 Socket 不遵循IP路由配置规则?
  19. 爆料!滴滴或于4-5月开启第二轮裁员,内部员工透露细节:或无赔偿!
  20. 小鸟云服务器怎么进行启动和关机?

热门文章

  1. rt-thread移植并使用mavlink教程
  2. 云计算——网络布线(1)
  3. Java本机内存跟踪NMT实战详解
  4. 20221101关于cross_val_score、cross_validate学习
  5. 基于stm32f1(正点原子)的tft_lcd(ILI9341)学习
  6. 一文了解互联网技术岗
  7. Codeforces 662C
  8. 各CCFA类核心期刊的信息汇总与评价总结(科技领域)
  9. vue+vite项目当中:介绍一种生成助记词新方法,兼容以太坊
  10. 电商领域如此火爆,大咖们都在做的无货源到底是什么?