- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用单片机控制的LED摇摇棒程序设计
本摇摇棒为开发套件,全部采用直插的器件。显示的LED采用了5mm超高亮30度聚光发光二极管,共32只。控制芯片采用宏晶单片机STC11F03E,其内部有3K的程序存储空间,256字节的数据存储空间,另外其内部还有2K的EEPROM空间。设计可以通过串口,把下载的画面数据到内部的EEPROM,掉电后,也不会丢失。本遥遥棒设计采用4节5号电池,可是普通电池(供电电压每节1.5V),也可以是可充电电池(供电电压每节1.2V)。设计中有一个电源开关。两个按键,两个LED指示灯(可以用单片机控制)。设计原理:32只LED,采用74HC595串联控制,数据是串进并出的。由单片机控制是只有三个数据线,DAT,CLK,RCK。DAT为串行数据输入引脚,CLK为串行数据的时钟,上升沿把数据存入74HC595芯片。RCK为二级锁存信号,上升沿把并行的数据输出到74HC595,来控制32个LED。设计原理图如下。在控制电路上,检测摇摇棒左右方向上,设计采用了一个水银开关,安装在摇摇棒的顶部,在摇摇棒左右摆到的时候,到底左边时,里面的水银把这个开关的触短路,通过上拉电阻,短路时,输出低电平。输出的低电平,接到单片机的中断引脚。单片机的工作电路,就是复位电路,晶振电路。按键电路,按下低电平。LED指示灯电路,低电平亮。程序控制:控制32个LED的程序:void display(){unsigned long add=0; //数据地址入口unsigned char num; //串行数据临时存放unsigned int i;add=n+prictur*256; //计算切换图片地址入口num=tab2[add]; //取出单行数据for(i=0;i8;i++){CLK=0; //串行数据时钟,置低电平DAT=!(0x80num); //把1位数据输出,经过取反与提取数据格式有关CLK=1; //串行数据时钟,置高电平,与上面低电平,产生上升沿num=1; //数据左移}num=tab2[add+W_U];for(i=0;i8;i++){CLK=0;DAT=!(0x80num);CLK=1;num=1;}num=tab2[add+2*W_U];for(i=0;i8;i++){CLK=0;DAT=!(0x80num);CLK=1;num=1;}num=tab2[add+3*W_U];for(i=0;i8;i++){CLK=0;DAT=!(0x80num);CLK=1;num=1;}RCK=0; //二级锁存,低电平RCK=1; //二级锁存,高电平,产生上升沿,并行控制LED}程序要控制,当检测到传感器有低电平的时候,产生中断,先加一个延时,消除传感器抖动。然后把数据分时送到32只LED,利用人眼视觉残留。就会显示一幅画面。详细程序见附件。使用说明本套件为可二次开发的套件,设计中引出了单片机的下载引脚。为套件中的4个排针。引脚的顺序为VCC,TX,RX,GND。控制按键及指示灯的引脚列表:编号 功能 单片机引脚号 引脚名字 备注S4 KEY 1 8 P3.4 按下低电平S2 KEY 2 9 P3.5 按下低电平D34 LED 2 19 P1.7 低电平亮D33 LED 1 18 P1.6 低电平亮主程序:// chenjie//2010.07.04//taobao: // eeprom test program#include#include #includeeeprom.h#includead.h#define W_U 64#define W_D 64sbit DAT=P1^0;sbit CLK=P1^1;sbit RCK=P1^2;sbit LED_R=P1^6;sbit LED_L=P1^7;sbit KEY1=P3^4;sbit KEY2=P3^5;sbit DSEN=P3^2;int n=0;unsigned long cnt=0;unsigned long cnt1;unsigned long cnt2;unsigned int flag_dis=0;unsigned int flag_dis2=0;unsigned char code tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0xff,0xf0,0x0f,0x55};unsigned char code tab2[]={0x00,0x01,0x01,0x01,0x0F,
文档评论(0)