51单片机跑马灯论文灯

51单片机的音乐跑马灯设计_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
51单片机的音乐跑马灯设计
阅读已结束,下载本文需要
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩32页未读,
定制HR最喜欢的简历
你可能喜欢【图文】单片机实例之跑马灯_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
单片机实例之跑马灯
阅读已结束,下载本文到电脑
定制HR最喜欢的简历
你可能喜欢51单片机的走马灯C语言程序
15:42:53编辑:什么鱼 关键字:&&&&
unsigned char RunM &&&&
void Delay1ms(unsigned int count) &&
&&&&unsigned int i,j; &&
&&&&for(i=0;i<i++) &&
&&&&for(j=0;j<120;j++); &&
unsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, &&&//0~7 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF}; &&
void Display(unsigned char Value) &&
&&&&P3 = LEDDisplayCode[Value]; &&
void LEDFlash(unsigned char Count) &&
&&&&bit F &&
&&&&for(i = 0; i<Ci++) &&
&&&&&&&&Flag = !F &&
&&&&&&&&if(Flag) &&
&&&&&&&&&&&&Display(RunMode); &&
&&&&&&&&else &&
&&&&&&&&&&&&Display(0x10); &&
&&&&&&&&Delay1ms(100); &&
&&&&Display(RunMode); &&
unsigned char GetKey(void) &&
&&&&unsigned char KeyTemp,CheckValue,Key = 0x00; &&
&&&&CheckValue = P2&0x32; &&
&&&&if(CheckValue==0x32) &&
&&&&&&&&return 0x00; &&
&&&&Delay1ms(10); &&
&&&&KeyTemp = P2&0x32; &&
&&&&if(KeyTemp==CheckValue) &&
&&&&&&&&return 0x00; &&
&&&&if(!(CheckValue&0x02)) &&
&&&&&&&&Key|=0x01; &&
&&&&if(!(CheckValue&0x10)) &&
&&&&&&&&Key|=0x02; &&
&&&&if(!(CheckValue&0x20)) &&
&&&&&&&&Key|=0x04; &&
&&&&return K &&
unsigned int TimerCount,SystemSpeed,SystemSpeedI &&
void InitialTimer2(void) &&
&&&&T2CON &= 0x00; &&&&&&&&&//16 Bit Auto-Reload Mode &&
&&&&TH2 = RCAP2H = 0xFC; &&&//重装值,初始值 &&TL2 = RCAP2L = 0x18; &&
&&&&ET2=1; &&&&&&&&&&&&&&&&&//定时器 2 中断允许 &&
&&&&TR2 = 1; &&&&&&&&&&&&&&&//定时器 2 启动 &&
&&&&EA=1; &&
unsigned int code SpeedCode[]={ &&1, &&2, &&3, &&5, &&8, &10, &14, &17, &20, &30, &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&40, &50, &60, &70, &80, &90, 100, 120, 140, 160, &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30 &&
void SetSpeed(unsigned char Speed) &&
&&&&SystemSpeed =SpeedCode[Speed]; &&
void LEDShow(unsigned int LEDStatus) &&
&&&&P1 = ~(LEDStatus&0x00FF); &&
&&&&P0 = ~((LEDStatus>>8)&0x00FF); &&
void InitialCPU(void) &&
&&&&RunMode = 0x00; &&
&&&&TimerCount = 0; &&
&&&&SystemSpeedIndex = 10; &&
&&&&P1 = 0x00; &&
&&&&P0 = 0x00; &&
&&&&P2 = 0xFF; &&
&&&&P3 = 0x00; &&
&&&&Delay1ms(500); &&
&&&&P1 = 0xFF; &&
&&&&P0 = 0xFF; &&
&&&&P2 = 0xFF; &&
&&&&P3 = 0xFF; &&
&&&&SetSpeed(SystemSpeedIndex); &&
&&&&Display(RunMode); &&
//Mode 0 &&
unsigned int LEDIndex = 0; &&
bit LEDDirection = 1,LEDFlag = 1; &&
void Mode_0(void) &&
&&&&LEDShow(0x0001<<LEDIndex); &&
&&&&LEDIndex = (LEDIndex+1); &&
//Mode 1 &&
void Mode_1(void) &&
&&&&LEDShow(0x8000>>LEDIndex); &&
&&&&LEDIndex = (LEDIndex+1); &&
//Mode 2 &&
void Mode_2(void) &&
&&&&if(LEDDirection) &&
&&&&&&&&LEDShow(0x0001<<LEDIndex); &&
&&&&else &&
&&&&&&&&LEDShow(0x8000>>LEDIndex); &&
&&&&if(LEDIndex==15) &&
&&&&&&&&LEDDirection = !LEDD &&
&&&LEDIndex = (LEDIndex+1); &&
//Mode 3 &&
void Mode_3(void) &&
&&&&if(LEDDirection) &&
&&&&&&&&LEDShow(~(0x0001<<LEDIndex)); &&
&&&&else &&
&&&&&&&&LEDShow(~(0x8000>>LEDIndex)); &&
&&&&if(LEDIndex==15) &&
&&&&&&&&LEDDirection = !LEDD &&
&&&LEDIndex = (LEDIndex+1); &&
//Mode 4 &&
void Mode_4(void) &&
&&&&if(LEDDirection) &&
&&&&&&&&if(LEDFlag) &&
&&&&&&&&&&&&LEDShow(0xFFFE<<LEDIndex); &&
&&&&&&&&else &&
&&&&&&&&&&&&LEDShow(~(0x7FFF>>LEDIndex)); &&
&&&&else &&
&&&&&&&&if(LEDFlag) &&
&&&&&&&&&&&&LEDShow(0x7FFF>>LEDIndex); &&
&&&&&&&&else &&
&&&&&&&&&&&&LEDShow(~(0xFFFE<<LEDIndex)); &&
&&&&if(LEDIndex==15) &&
&&&&&&&&LEDDirection = !LEDD &&
&&&&&&&&if(LEDDirection) &&&LEDFlag = !LEDF &&
&&&&LEDIndex = (LEDIndex+1); &&
//Mode 5 &&
void Mode_5(void) &&
&&&&if(LEDDirection) &&
&&&&&&&&LEDShow(0x000F<<LEDIndex); &&
&&&&else &&
&&&&&&&&LEDShow(0xF000>>LEDIndex); &&
&&&&if(LEDIndex==15) &&
&&&&&&&&LEDDirection = !LEDD &&
&&&&LEDIndex = (LEDIndex+1); &&
//Mode 6 &&
void Mode_6(void) &&
&&&&if(LEDDirection) &&
&&&&&&&&LEDShow(~(0x000F<<LEDIndex)); &&
&&&&else &&
&&&&&&&&LEDShow(~(0xF000>>LEDIndex)); &&
&&&&if(LEDIndex==15) &&
&&&&&&&&LEDDirection = !LEDD &&
&&&&LEDIndex = (LEDIndex+1); &&
//Mode 7 &&
void Mode_7(void) &&
&&&&if(LEDDirection) &&
&&&&&&&&LEDShow(0x003F<<LEDIndex); &&
&&&&else &&
&&&&&&&&LEDShow(0xFC00>>LEDIndex); &&
&&&&if(LEDIndex==9) &&
&&&&&&&&LEDDirection = !LEDD &&
&&&&LEDIndex = (LEDIndex+1); &&
//Mode 8 &&
void Mode_8(void) &&
&&&&LEDShow(++LEDIndex); &&
void TimerEventRun(void) &&
&&&&if(RunMode==0x00) &&
&&&&&&&&Mode_0(); &&&&&
&&&&else if(RunMode ==0x01) &&
&&&&&&&&Mode_1(); &&
&&&&else if(RunMode ==0x02) &&
&&&&&&&&Mode_2(); &&
&&&&else if(RunMode ==0x03) &&
&&&&&&&&Mode_3(); &&
&&&&else if(RunMode ==0x04) &&
&&&&&&&&Mode_4(); &&
&&&&else if(RunMode ==0x05) &&
&&&&&&&&Mode_5(); &&
&&&&else if(RunMode ==0x06) &&
&&&&&&&&Mode_6(); &&
&&&&else if(RunMode ==0x07) &&
&&&&&&&&Mode_7(); &&
&&&&else if(RunMode ==0x08) &&
&&&&&&&&Mode_8(); &&
void Timer2(void) interrupt 5 using 3 &&
&&&&TF2 = 0; &&&//中断标志清除( Timer2 必须软件清标志!) &&
&&&&if(++TimerCount>=SystemSpeed) &&
&&&&&&&&TimerCount = 0; &&
&&&&&&&&TimerEventRun(); &&
unsigned char MusicIndex = 0; &&
void KeyDispose(unsigned char Key) &&
&&&&if(Key&0x01) &&
&&&&&&&&LEDDirection = 1; &&
&&&&&&&&LEDIndex = 0; &&
&&&&&&&&LEDFlag = 1; &&
&&&&&&&&RunMode = (RunMode+1)%9; &&
&&&&&&&&Display(RunMode); &&
&&&&if(Key&0x02) &&
&&&&&&&&if(SystemSpeedIndex>0) &&
&&&&&&&&{ &&
&&&&&&&&&&&&--SystemSpeedI &&
&&&&&&&&&&&&SetSpeed(SystemSpeedIndex); &&
&&&&&&&&} &&
&&&&&&&&else &&
&&&&&&&&{ &&
&&&&&&&&&&&&LEDFlash(6); &&
&&&&&&&&} &&
&&&&if(Key&0x04) &&
&&&&&&&&if(SystemSpeedIndex<28) &&
&&&&&&&&{ &&
&&&&&&&&&&&&++SystemSpeedI &&
&&&&&&&&&&&&SetSpeed(SystemSpeedIndex); &&
&&&&&&&&} &&
&&&&&&&&else &&
&&&&&&&&{ &&
&&&&&&&&&&&&LEDFlash(6); &&
&&&&&&&&} &&
&&&&} &&&&&
&&&&unsigned char K &&
&&&&InitialCPU(); &&
&&&&InitialTimer2(); &&
&&&&while(1) &&
&&&&&&&&Key = GetKey(); &&
&&&&&&&&if(Key!=0x00) &&
&&&&&&&&{ &&
&&&&&&&&&&&&KeyDispose(Key); &&
&&&&&&&&} &&
关键字:&&&&
来源: eefocus
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
关注eeworld公众号快捷获取更多信息
关注eeworld服务号享受更多官方福利
/*&名称:51单片机实现LED流水灯(数组方式和位运算方式)说明:今天又重新开始系统的学习51了,LED就算个开端吧。&要注意两点:&1、sfr和sbit是C语言扩展出来的关键字。其中sfr用于对特殊功能寄存器进行声明,sbit用于对某些特殊功能寄存器的某位进行声明。这里和宏定义很相似,但是不能用宏定义进行替换,对于前者是因为51单片机的寄存器存在于内部空间0x80-0xFF,这空间属于直接寻址,51特殊功能寄存只能直接寻址,不能间接寻址。如果用宏定义的话,在翻译成汇编时就会认为是通过总线访问对应的外部地址了。对于后者,sbit是定义一个标志位,也叫位变量。而类似于#define key1 P3
/*&名称:51单片机之按键实验&说明:键盘是计算机最基础、最重要的输入设备之一。对于键盘来说,其工作任务大体可以分为以下三项:&(1)、按键识别。即判断有无按键按下。&(2)、求键值。判断哪个键被按下。&(3)、执行相应的操作。&在这里,实验所用到的键盘为独立键盘和矩阵键盘。对于独立键盘,它的每个按键需要占用一个IO口。一般来说,按键一端接地,另一端接IO口。当按键按下时,线路被导通,IO口被拉低,即状态为‘0’。所以在使用是我们一般把对应IO口置成高电平,然后不断检测此IO口是否被拉低,从而判断按键是否按下。&对于矩阵键盘来说,它用较少的IO口完成较多个按键
/*&名称:51单片机之数码管显示实验&说明:对于数码管来说,其本质上可以理解为按照一定规则组合的多个二极管。其使用只需按照特定规则显示对应的二极管即可。要稍微注意一点的就是多个数码管的显示分为静态显示和动态显示。静态显示就是每个二极管显示的内容是一样的,通过片选信号来决定是哪个二极管该显示。动态数码管,即利用人眼的视觉停留效果,快速扫描,快速显示每个数码管的内容,使得每个数码管看起来好像是一起显示的一样。&本实验编写了几个数码管显示的简单程序。在此不做赘述了。*/#include &reg52.h&#define uchar unsigned char//共阳极段码(a在高位,dp在低位
最近的一个项目中测试系统的高低温实验,结果意外的发现经过高低温实验后(80℃到-20摄氏度)单片机有些已经死机了,所以不得不着手研究一下这个问题,在网上查阅资料后,基本上可以归结于以下几个问题:1. 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象&2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。&&3. 地址溢出,常见错误为指针操作
51单片机的外部中断有两种模式:电平触发模式和跳变沿触发模式第一,选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。第二,选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。&区别:电平触发模式时,中断标志寄存器不锁存电平中断请求信号。单片机把每个周期的S5P2采样外部中断口的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换言之,就是要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行
最近看了一下80C51单片机的中断部分的实验,做一些笔记,方便以后学习查找。&首先说一下什么是中断吧,中断是指CPU在执行当前程序的过程中,由于某种随机出现的外设(外部设备)请求或CPU内部的异常事件,使CPU暂停正在执行的程序而转去执行相应的服务处理程序;当服务处理程序运行完毕之后,CPU再返回到暂停处继续执行原来的程序。那什么是中断嵌套呢?简单点说就是低优先级的中断可以被高优先级的中断源所中断,等高优先级中断服务程序结束后,再返回去执行被中断的的低优先级的中断服务程序。举个简单的栗子吧(之前写过但不知道怎么删了,,又让我重新编辑):比如我们就是一个CPU,我们当前在洗衣服(当前程序),突然电话铃声响了(中断来了
热门资源推荐
最新单片机文章
最新视频课程
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。
相关热搜器件#include &reg51.h&
void delay(unsigned int i);
void SHR(unsigned char beginchar,unsigned char count,unsigned char stepcount,bit opretor,unsigned int delaytime);
void main()
for(i=0;i&8;i++)
SHR(0x7f,8-i,1,1,300);
for(i=0;i&8;i++)
SHR(0x80,8-i,1,0,300);
void delay(unsigned int i)
for(i;i&0;i--)
for(j=255;j&0;j--);
void SHR(unsigned char beginchar,unsigned char count,unsigned char stepcount,bit opretor,unsigned int delaytime)
unsigned char tempchar=0;
unsigned char tempP2=0;
unsigned char endchar=
tempchar=endchar&&(8-count);
endchar&&=
endchar=tempchar|
tempP2=P2;
if(opretor)
delay(delaytime);
tempchar=beginchar&&(8-stepcount);
beginchar&&=
beginchar=tempchar|
if(beginchar!=endchar)
P2=tempP2;
}while(beginchar!=endchar);
protues与keil联合仿真51单片机跑马灯实例
注:本文主要介绍利用protues和keil软件联合仿真51单片机进行的跑马灯实例。
软件:Proteus 8 Professional 和 Keil uVision4(目前keil分为ARM的和...
最开始跟着视频学习,写简单而且单一的程序控制跑马灯,往单片机下载时出现问题导致程序不能正常下载,后发现是串口选择错误,现已经可以点亮跑马灯,正进一步学习,发现c语言遗忘严重,重新学习c语言,进一步可以...
单片机控制跑马灯
一、跑马灯和流水灯的区别
好多人分不清跑马灯和流水灯,还以为是同一种状态,虽然难度等级是一样的,但是灯的亮灭显示方式是不一样的。请看下图
二、单片机控制LED灯的常用电路接法
弄清楚跑马灯的显示...
手把手讲解51单片机最小系统焊接、流水灯(跑马灯)编写以及烧录
(1)首先当然是要买“51单片机最小系统的散件”,淘宝上面卖的比较多,散件的话一般二、三十左右,其次还需要买一个电烙铁,一般30瓦的就足够了,这里我就讲一讲51单片机散件的焊接方法和注意事项。
跑马灯实例(循环移位)
功能:循环轮流点亮8只发光管LED
用51单片机实现爱心跑马灯程序
用51单片机实现爱心跑马灯程序
本人闲来无事做,见实验室的小伙伴用LED等做了一个跑马灯,顿时引来了一大群妹子,当时就不服了,哼,不就是一个流水灯,说的跟谁不会一样
制作的是32个...
没有更多推荐了,&#xe621; 上传我的文档
&#xe621; 上传文档
&#xe602; 下载
&#xe60c; 收藏
粉丝量:196
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
基于at89c51单片机的跑马灯的设计与制作【毕业论文】 41324
下载积分:2000
内容提示:基于at89c51单片机的跑马灯的设计与制作【毕业论文】 41324
文档格式:DOC|
浏览次数:82|
上传日期: 07:23:51|
文档星级:&#xe60b;&#xe60b;&#xe60b;&#xe60b;&#xe60b;
全文阅读已结束,如果下载本文需要使用
&#xe71b; 2000 积分
&#xe602;下载此文档
该用户还上传了这些文档
基于at89c51单片机的跑马灯的设计与制作【毕业论文
关注微信公众号}

我要回帖

更多关于 pic单片机跑马灯程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信