C语言设计8位二进制循环移位跑马灯逐个循环亮灭效果

56被浏览8,658分享邀请回答235 条评论分享收藏感谢收起0添加评论分享收藏感谢收起超简单,100分求[电脑控制12个led的跑马灯的电路图及程序!]解决思路 - 单片机当前位置:& &&&超简单,100分求[电脑控制12个led的跑马灯的电路图超简单,100分求[电脑控制12个led的跑马灯的电路图及程序!]解决思路www.MyException.Cn&&网友分享于:&&浏览:19次超简单,100分求[电脑控制12个led的跑马灯的电路图及程序!]电脑控制12个led的跑马灯的电路图及程序!谢谢!------解决方案--------------------楼主说得不详细吖电脑是直接控制还是借助单片机控制?控制跑马灯的什么?循环时间?
------解决方案--------------------跑马灯自然是循环闪亮了,那个应该是单片机的吧,没听说用电脑控制,也许是在电脑上写界面吧.跑马灯很好做啊,随便找本单片机的书看看.主要是看用什么芯片,针对的看一下就OK了
------解决方案--------------------我说的电脑直接控制是说把电脑里的总线引出来接到LED灯上,然后在电脑上编个跑马灯程序运行,我以前上微机原理这门课时,有个上机实验就是用这种方法做8个灯循环点亮
------解决方案--------------------可以通过并口编程来实现
------解决方案--------------------探讨(也有烧芯片的设备)
------解决方案--------------------
硬件上或许可以接个3,8译码器
------解决方案--------------------程序应该用C来实现,汇编岂不费更多精力?LED能否驱动起来?至少还没有表明是共阴极还是共阳极的。
------解决方案--------------------
硬件电路有问题啊。单片机2脚、3脚应该接max232,P10~P17和P32~P35接12个LED,LED负极接单片机接口,正极接限流电阻后接到5V。其他:如果你用的单片机没有内部晶振,要接外部晶体。另外程序最好用c语言,比较简单
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有第20节:依次逐个亮灯并且每次只能亮一个灯的跑马灯程序
> 第20节:依次逐个亮灯并且每次只能亮一个灯的跑马灯程序
第20节:依次逐个亮灯并且每次只能亮一个灯的跑马灯程序
开场白:上一节讲了先依次逐个亮再依次逐个灭的跑马灯程序。这一节在上一节的基础上,略作修改,继续讲跑马灯程序。我的跑马灯程序看似简单而且重复,其实蕴含着鸿哥的大智慧。它是基于鸿哥的switch状态机思想,领略到了它的简单和精髓,以后任何所谓复杂的工程项目,都不再复杂。要教会大家一个知识点:通过本跑马灯程序,加深理解鸿哥所有实战项目中switch状态机的思想精髓。具体内容,请看源代码讲解。(1)硬件平台:基于朱兆祺51单片机学习板。(2)实现功能:第9个至第16个LED灯,依次逐个亮灯并且每次只能亮一个灯。第1至第8个LED灯一直灭。(3)源代码讲解如下:#include "REG52.H"#define const_time_level_09_16 300 //第9个至第16个LED跑马灯的速度延时时间void initial_myself();
void initial_peripheral();void delay_short(unsigned int uiDelayShort);void delay_long(unsigned int uiDelaylong);void led_flicker_09_16(); // 第9个至第16个LED的跑马灯程序,逐个亮并且每次只能亮一个.void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01);void led_update(); //LED更新函数void T0_time(); //定时中断函数sbit hc595_sh_dr=P2^3;
sbit hc595_st_dr=P2^4; sbit hc595_ds_dr=P2^5; unsigned char ucLed_dr1=0;
//代表16个灯的亮灭状态,0代表灭,1代表亮unsigned char ucLed_dr2=0;unsigned char ucLed_dr3=0;unsigned char ucLed_dr4=0;unsigned char ucLed_dr5=0;unsigned char ucLed_dr6=0;unsigned char ucLed_dr7=0;unsigned char ucLed_dr8=0;unsigned char ucLed_dr9=0;unsigned char ucLed_dr10=0;unsigned char ucLed_dr11=0;unsigned char ucLed_dr12=0;unsigned char ucLed_dr13=0;unsigned char ucLed_dr14=0;unsigned char ucLed_dr15=0;unsigned char ucLed_dr16=0;unsigned char ucLed_update=0; //刷新变量。每次更改LED灯的状态都要更新一次。unsigned char ucLedStep_09_16=0; //第9个至第16个LED跑马灯的步骤变量unsigned int uiTimeCnt_09_16=0; //第9个至第16个LED跑马灯的统计定时中断次数的延时计数器unsigned char ucLedStatus16_09=0;
//代表底层74HC595输出状态的中间变量unsigned char ucLedStatus08_01=0;
//代表底层74HC595输出状态的中间变量void main() { initial_myself();
delay_long(100);
initial_peripheral(); while(1)
led_flicker_09_16(); // 第9个至第16个LED的跑马灯程序,逐个亮并且每次只能亮一个.
led_update(); //LED更新函数 }}void led_update() //LED更新函数{ if(ucLed_update==1) {
ucLed_update=0;
//及时清零,让它产生只更新一次的效果,避免一直更新。
if(ucLed_dr1==1)
ucLedStatus08_01=ucLedStatus08_01|0x01;
ucLedStatus08_01=ucLedStatus08_01&0
if(ucLed_dr2==1)
ucLedStatus08_01=ucLedStatus08_01|0x02;
ucLedStatus08_01=ucLedStatus08_01&0
if(ucLed_dr3==1)
ucLedStatus08_01=ucLedStatus08_01|0x04;
ucLedStatus08_01=ucLedStatus08_01&0
if(ucLed_dr4==1)
ucLedStatus08_01=ucLedStatus08_01|0x08;
ucLedStatus08_01=ucLedStatus08_01&0xf7;
if(ucLed_dr5==1)
ucLedStatus08_01=ucLedStatus08_01|0x10;
ucLedStatus08_01=ucLedStatus08_01&0
if(ucLed_dr6==1)
ucLedStatus08_01=ucLedStatus08_01|0x20;
ucLedStatus08_01=ucLedStatus08_01&0
if(ucLed_dr7==1)
ucLedStatus08_01=ucLedStatus08_01|0x40;
ucLedStatus08_01=ucLedStatus08_01&0
if(ucLed_dr8==1)
ucLedStatus08_01=ucLedStatus08_01|0x80;
ucLedStatus08_01=ucLedStatus08_01&0x7f;
if(ucLed_dr9==1)
ucLedStatus16_09=ucLedStatus16_09|0x01;
ucLedStatus16_09=ucLedStatus16_09&0
if(ucLed_dr10==1)
ucLedStatus16_09=ucLedStatus16_09|0x02;
ucLedStatus16_09=ucLedStatus16_09&0
if(ucLed_dr11==1)
ucLedStatus16_09=ucLedStatus16_09|0x04;
ucLedStatus16_09=ucLedStatus16_09&0
if(ucLed_dr12==1)
ucLedStatus16_09=ucLedStatus16_09|0x08;
ucLedStatus16_09=ucLedStatus16_09&0xf7;
if(ucLed_dr13==1)
ucLedStatus16_09=ucLedStatus16_09|0x10;
ucLedStatus16_09=ucLedStatus16_09&0
if(ucLed_dr14==1)
ucLedStatus16_09=ucLedStatus16_09|0x20;
ucLedStatus16_09=ucLedStatus16_09&0
if(ucLed_dr15==1)
ucLedStatus16_09=ucLedStatus16_09|0x40;
ucLedStatus16_09=ucLedStatus16_09&0
if(ucLed_dr16==1)
ucLedStatus16_09=ucLedStatus16_09|0x80;
ucLedStatus16_09=ucLedStatus16_09&0x7f;
hc595_drive(ucLedStatus16_09,ucLedStatus08_01); //74HC595底层驱动函数 }}void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01){ unsigned char ucTempD hc595_sh_dr=0; hc595_st_dr=0; ucTempData=ucLedStatusTemp16_09; //先送高8位 for(i=0;i<8;i++) {
if(ucTempData>=0x80)hc595_ds_dr=1;
else hc595_ds_dr=0;
hc595_sh_dr=0;
//SH引脚的上升沿把数据送入寄存器
delay_short(15);
hc595_sh_dr=1;
delay_short(15);
ucTempData=ucTempData<<1; } ucTempData=ucLedStatusTemp08_01; //再先送低8位 for(i=0;i<8;i++) {
if(ucTempData>=0x80)hc595_ds_dr=1;
else hc595_ds_dr=0;
hc595_sh_dr=0;
//SH引脚的上升沿把数据送入寄存器
delay_short(15);
hc595_sh_dr=1;
delay_short(15);
ucTempData=ucTempData<<1; } hc595_st_dr=0; //ST引脚把两个寄存器的数据更新输出到74HC595的输出引脚上并且锁存起来 delay_short(15); hc595_st_dr=1; delay_short(15); hc595_sh_dr=0;
//拉低,抗干扰就增强 hc595_st_dr=0; hc595_ds_dr=0;}/* 注释一:* 以下程序,看似简单而且重复,其实蕴含着鸿哥的大智慧。* 它是基于鸿哥的switch状态机思想,领略到了它的简单和精髓,* 以后任何所谓复杂的工程项目,都不再复杂。*/void led_flicker_09_16() //第9个至第16个LED的跑马灯程序,逐个亮并且每次只能亮一个.{ switch(ucLedStep_09_16) {
if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到
uiTimeCnt_09_16=0; //时间计数器清零
ucLed_dr16=0; //第16个灭
ucLed_dr9=1; //第9个亮
ucLed_update=1; //更新显示
ucLedStep_09_16=1; //切换到下一个步骤
if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到
uiTimeCnt_09_16=0; //时间计数器清零
ucLed_dr9=0; //第9个灭
ucLed_dr10=1; //第10个亮
ucLed_update=1; //更新显示
ucLedStep_09_16=2; //切换到下一个步骤
if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到
uiTimeCnt_09_16=0; //时间计数器清零
ucLed_dr10=0; //第10个灭
ucLed_dr11=1; //第11个亮
ucLed_update=1; //更新显示
ucLedStep_09_16=3; //切换到下一个步骤
if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到
uiTimeCnt_09_16=0; //时间计数器清零
ucLed_dr11=0; //第11个灭
ucLed_dr12=1; //第12个亮
ucLed_update=1; //更新显示
ucLedStep_09_16=4; //切换到下一个步骤
if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到
uiTimeCnt_09_16=0; //时间计数器清零
ucLed_dr12=0; //第12个灭
ucLed_dr13=1; //第13个亮
ucLed_update=1; //更新显示
ucLedStep_09_16=5; //切换到下一个步骤
if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到
uiTimeCnt_09_16=0; //时间计数器清零
ucLed_dr13=0; //第13个灭
ucLed_dr14=1; //第14个亮
ucLed_update=1; //更新显示
ucLedStep_09_16=6; //切换到下一个步骤
if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到
uiTimeCnt_09_16=0; //时间计数器清零
ucLed_dr14=0; //第14个灭
ucLed_dr15=1; //第15个亮
ucLed_update=1; //更新显示
ucLedStep_09_16=7; //切换到下一个步骤
if(uiTimeCnt_09_16>=const_time_level_09_16) //时间到
uiTimeCnt_09_16=0; //时间计数器清零
ucLed_dr15=0; //第15个灭
ucLed_dr16=1; //第16个亮
ucLed_update=1; //更新显示
ucLedStep_09_16=0; //返回到开始处,重新开始新的一次循环
}}void T0_time() interrupt 1{ TF0=0; //清除中断标志 TR0=0; //关中断 if(uiTimeCnt_09_16<0xffff) //设定这个条件,防止uiTimeCnt超范围。 {
uiTimeCnt_09_16++; //累加定时中断的次数, } TH0=0xf8;
//重装初始值()=f TL0=0x2f; TR0=1; //开中断}void delay_short(unsigned int uiDelayShort){
for(i=0;i<uiDelaySi++) {
//一个分号相当于执行一条空语句 }}void delay_long(unsigned int uiDelayLong){ for(i=0;i<uiDelayLi++) {
for(j=0;j<500;j++) //内嵌循环的空指令数量
{ //一个分号相当于执行一条空语句
} }}void initial_myself() //第一区 初始化单片机{ TMOD=0x01; //设置定时器0为工作方式1 TH0=0xf8;
//重装初始值()=f TL0=0x2f;}void initial_peripheral() //第二区 初始化外围{ EA=1;
//开总中断 ET0=1;
//允许定时中断 TR0=1;
//启动定时中断}总结陈词:上一节和这一节讲了两种不同的跑马灯程序,如果要让这两种不同的跑马灯程序都能各自独立运行,就涉及到多任务并行处理的程序框架。没错,下一节就讲多任务并行处理这方面的知识,欲知详情,请听下回分解-----多任务并行处理两路跑马灯。
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一C语言设计跑马灯程序_百度知道
C语言设计跑马灯程序
实现第一个灯亮.7接八个LED,用89C51单片机的P1.0到P1就是用C语言设计一个跑马灯的程序,过几秒第一和第二个灯亮…………最后灯都亮了后,程序在重新进行,即又是只有一个灯亮,一直循环下去
我有更好的答案
/bt++);t--) for(bt=0;bt&
delay(100);
//&定义无符号字符#define uint unsigned int
/&#47#include&reg51.h&/声明延时函数void main(void){ uchar temp!!;t;255;=1;
}} void delay(uint t)
/ while(1)
{ temp=0x01;
for(i=0;调用延时函数
temp&i&8;i++)
//8个流水灯逐个闪动
P1=~定义无符号整数void delay(uint);/51系列单片机定义文件#define uchar unsigned char //
/}跑马灯程序最基本的,c语言还未入门啊;/定义延时函数{for(
采纳率:11%
你费那劲做啥,设计一个俄罗期大轮盘,一直转不就得了
为您推荐:
其他类似问题
您可能关注的内容
程序 c语言设计 跑马灯的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。一场Pokemon
Go,让全世界的小精灵师都暴露了。因此,在……
2016年初,一场人机大战点燃了人工智能芯片的争夺战,而……
今年,频频爆出摩尔定律将不再是制造工艺界的神话,虽说……
值农历新年佳节之际,很多半导体公司都借机召开了自己的……
21ic 2016年度采访之TE――将无人机与VR连接在一起
演讲人:彭煜歆时间: 10:00:00
演讲人:杜复旦时间: 10:00:00
演讲人:沈凯时间: 10:00:00
预算:¥5,000-¥10000预算:¥50,000-¥100,000
第19节:依次逐个点亮LED之后,再依次逐个熄灭LED的跑马灯程序
[导读]从业将近十年!手把手教你单片机程序框架 第19讲:开场白:上一节讲了把74HC595驱动程序翻译成类似单片机IO口直接驱动的方式。这节在上一节的驱动程序基础上,开始讲跑马灯程序。我的跑马灯程序看似简单而且重复,其实
从业将近十年!手把手教你单片机程序框架 第19讲:
上一节讲了把74HC595驱动程序翻译成类似单片机IO口直接驱动的方式。这节在上一节的驱动程序基础上,开始讲跑马灯程序。我的跑马灯程序看似简单而且重复,其实蕴含着鸿哥的大智慧。它是基于鸿哥的switch状态机思想,领略到了它的简单和精髓,以后任何所谓复杂的工程项目,都不再复杂。要教会大家一个知识点:通过本跑马灯程序,加深理解鸿哥所有实战项目中switch状态机的思想精髓。
具体内容,请看源代码讲解。
(1)硬件平台:基于朱兆祺51单片机学习板。
(2)实现功能:第1个至第8个LED灯,先依次逐个亮,再依次逐个灭。第9至第16个LED灯一直灭。
(3)源代码讲解如下:
#include &REG52.H&
#define const_time_level_01_08 &200 &//第1个至第8个LED跑马灯的速度延时时间
void initial_myself(); & &
void initial_peripheral();
void delay_short(unsigned int uiDelayShort);&
void delay_long(unsigned int uiDelaylong);
void led_flicker_01_08(); // 第1个至第8个LED的跑马灯程序,逐个亮,逐个灭.
void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01);
void led_update(); &//LED更新函数
void T0_time(); &//定时中断函数
sbit hc595_sh_dr=P2^3; & &
sbit hc595_st_dr=P2^4; &
sbit hc595_ds_dr=P2^5; &
unsigned char ucLed_dr1=0; & //代表16个灯的亮灭状态,0代表灭,1代表亮
unsigned char ucLed_dr2=0;
unsigned char ucLed_dr3=0;
unsigned char ucLed_dr4=0;
unsigned char ucLed_dr5=0;
unsigned char ucLed_dr6=0;
unsigned char ucLed_dr7=0;
unsigned char ucLed_dr8=0;
unsigned char ucLed_dr9=0;
unsigned char ucLed_dr10=0;
unsigned char ucLed_dr11=0;
unsigned char ucLed_dr12=0;
unsigned char ucLed_dr13=0;
unsigned char ucLed_dr14=0;
unsigned char ucLed_dr15=0;
unsigned char ucLed_dr16=0;
unsigned char ucLed_update=0; &//刷新变量。每次更改LED灯的状态都要更新一次。
unsigned char ucLedStep_01_08=0; //第1个至第8个LED跑马灯的步骤变量
unsigned int &uiTimeCnt_01_08=0; //第1个至第8个LED跑马灯的统计定时中断次数的延时计数器
unsigned char ucLedStatus16_09=0; & //代表底层74HC595输出状态的中间变量
unsigned char ucLedStatus08_01=0; & //代表底层74HC595输出状态的中间变量
void main()&
& &initial_myself(); &
& &delay_long(100); &&
& &initial_peripheral();&
& &while(1) &&
& & & led_flicker_01_08(); // 第1个至第8个LED的跑马灯程序,逐个亮,逐个灭.
& & & & & led_update(); &//LED更新函数
void led_update() &//LED更新函数
& &if(ucLed_update==1)
& & & &ucLed_update=0; & //及时清零,让它产生只更新一次的效果,避免一直更新。
& & & &if(ucLed_dr1==1)
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01|0x01;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01&0
& & & & & &}
& & & &if(ucLed_dr2==1)
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01|0x02;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01&0
& & & & & &}
& & & &if(ucLed_dr3==1)
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01|0x04;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01&0
& & & & & &}
& & & &if(ucLed_dr4==1)
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01|0x08;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01&0xf7;
& & & & & &}
& & & &if(ucLed_dr5==1)
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01|0x10;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01&0
& & & & & &}
& & & &if(ucLed_dr6==1)
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01|0x20;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01&0
& & & & & &}
& & & &if(ucLed_dr7==1)
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01|0x40;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01&0
& & & & & &}
& & & &if(ucLed_dr8==1)
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01|0x80;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus08_01=ucLedStatus08_01&0x7f;
& & & & & &}
& & & &if(ucLed_dr9==1)
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09|0x01;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09&0
& & & & & &}
& & & &if(ucLed_dr10==1)
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09|0x02;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09&0
& & & & & &}
& & & &if(ucLed_dr11==1)
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09|0x04;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09&0
& & & & & &}
& & & &if(ucLed_dr12==1)
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09|0x08;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09&0xf7;
& & & & & &}
& & & &if(ucLed_dr13==1)
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09|0x10;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09&0
& & & & & &}
& & & &if(ucLed_dr14==1)
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09|0x20;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09&0
& & & & & &}
& & & &if(ucLed_dr15==1)
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09|0x40;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09&0
& & & & & &}
& & & &if(ucLed_dr16==1)
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09|0x80;
& & & & & &}
& & & & & &else
& & & & & &{
& & & & & & & ucLedStatus16_09=ucLedStatus16_09&0x7f;
& & & & & &}
& & & &hc595_drive(ucLedStatus16_09,ucLedStatus08_01); &//74HC595底层驱动函数
void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01)
& &unsigned char ucTempD
& &hc595_sh_dr=0;
& &hc595_st_dr=0;
& &ucTempData=ucLedStatusTemp16_09; &//先送高8位
& &for(i=0;i&8;i++)
& & & & &if(ucTempData&=0x80)hc595_ds_dr=1;
& & & & &else hc595_ds_dr=0;
& & & & &hc595_sh_dr=0; & & //SH引脚的上升沿把数据送入寄存器
& & & & &delay_short(15);&
& & & & &hc595_sh_dr=1;
& & & & &delay_short(15);&
& & & & &ucTempData=ucTempData&&1;
& &ucTempData=ucLedStatusTemp08_01; &//再先送低8位
& &for(i=0;i&8;i++)
& & & & &if(ucTempData&=0x80)hc595_ds_dr=1;
& & & & &else hc595_ds_dr=0;
& & & & &hc595_sh_dr=0; & & //SH引脚的上升沿把数据送入寄存器
& & & & &delay_short(15);&
& & & & &hc595_sh_dr=1;
& & & & &delay_short(15);&
& & & & &ucTempData=ucTempData&&1;
& &hc595_st_dr=0; &//引脚把两个寄存器的数据更新输出到74HC595的输出引脚上并且锁存起来
& &delay_short(15);&
& &hc595_st_dr=1;
& &delay_short(15);&
& &hc595_sh_dr=0; & &//拉低,抗干扰就增强
& &hc595_st_dr=0;
& &hc595_ds_dr=0;
/* 注释一:
* 以下程序,看似简单而且重复,其实蕴含着鸿哥的大智慧。
* 它是基于鸿哥的switch状态机思想,领略到了它的简单和精髓,
* 以后任何所谓复杂的工程项目,都不再复杂。
void led_flicker_01_08() //第1个至第8个LED的跑马灯程序,逐个亮,逐个灭.
& switch(ucLedStep_01_08)
& & &case 0:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr1=1; &//第1个亮
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=1; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 1:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr2=1; &//第2个亮
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=2; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 2:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr3=1; &//第3个亮
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=3; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 3:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr4=1; &//第4个亮
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=4; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 4:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr5=1; &//第5个亮
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=5; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 5:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr6=1; &//第6个亮
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=6; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 6:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr7=1; &//第7个亮
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=7; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 7:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr8=1; &//第8个亮
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=8; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 8:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr8=0; &//第8个灭
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=9; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 9:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr7=0; &//第7个灭
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=10; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 10:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr6=0; &//第6个灭
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=11; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 11:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr5=0; &//第5个灭
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=12; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 12:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr4=0; &//第4个灭
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=13; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 13:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr3=0; &//第3个灭
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=14; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 14:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr2=0; &//第2个灭
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=15; //切换到下一个步骤
& & & & & &}
& & & & & &
& & &case 15:
& & & & & &if(uiTimeCnt_01_08&=const_time_level_01_08) //时间到
& & & & & &{
& & & & & & & &uiTimeCnt_01_08=0; //时间计数器清零
& & & & & & & &ucLed_dr1=0; &//第1个灭
& & & & & & & &ucLed_update=1; &//更新显示
& & & & & & & &ucLedStep_01_08=0; //返回到最开始处,重新开始新的一次循环。
& & & & & &}
& & & & & &
void T0_time() interrupt 1
& TF0=0; &//清除中断标志
& TR0=0; //关中断
& if(uiTimeCnt_01_08&0xffff) &//设定这个条件,防止uiTimeCnt超范围。
& & & uiTimeCnt_01_08++; &//累加定时中断的次数,
& TH0=0xf8; & //重装初始值()=f
& TL0=0x2f;
& TR0=1; &//开中断
void delay_short(unsigned int uiDelayShort)&
& &for(i=0;i&uiDelaySi++)
& & &; & //一个分号相当于执行一条空语句
void delay_long(unsigned int uiDelayLong)
& &for(i=0;i&uiDelayLi++)
& & & for(j=0;j&500;j++) &//内嵌循环的空指令数量
& & & & & {
& & & & & & &; //一个分号相当于执行一条空语句
& & & & & }
void initial_myself() &//第一区 初始化单片机
& TMOD=0x01; &//设置定时器0为工作方式1
& TH0=0xf8; & //重装初始值()=f
& TL0=0x2f;
void initial_peripheral() //第二区 初始化外围
& EA=1; & & //开总中断
& ET0=1; & &//允许定时中断
& TR0=1; & &//启动定时中断
总结陈词:
这节讲了在第1个至第8个LED灯中,先依次逐个亮再依次逐个灭的跑马灯程序。下一节我们略作修改,继续做跑马灯的程序,要求在第9个至第16个LED灯中,依次逐个亮灯并且每次只能亮一个灯(其它的都灭),依次循环,我们该如何编写程序?欲知详情,请听下回分解-----依次逐个亮灯并且每次只能亮一个灯的跑马灯程序。
华为曾推出的石墨烯基锂离子电池引起了极大的关注,被誉为“黑黄金”的石墨烯材料开始展示了其独有的魅力逐渐实现商用。而石墨烯能干的不仅如此,现在又有研究人员使用石墨烯制造OLED电极。......关键字:
我们今天来谈一谈什么是创新,在手机上加入摄像头是创新,声控手机少掉一些操作步骤也是创新,这些都是成功的创新,然而还有一些创新却让我们的生活变得更加麻烦。比如,不用点火的火柴。
Matchbox ......关键字:
据报道,三星电子旗下三星显示器公司已经与苹果达成了一项新协议,为下一代iPhone追加供应6000万块OLED面板,价值5万亿韩元(约合43亿美元)。......关键字:
戴正吴最近获得了其母校台湾大同大学的荣誉博士学位。在学位授予典礼上,戴正吴告诉台下学生:&iPhone在不断改进,现在它将抛弃LTPS屏幕,转向采用OLED屏幕。我无法预测苹果的OLED屏iPhone是否会大获成功,但如......关键字:
今天凌晨,苹果新品爆料大神郭明池给出消息称,iPhone 8的电池将会增加,预计将提升至2700mAh容量仅次于现在的2900mAh的iPhone 7 Plus。......关键字:
2016年被称为OLED显示技术市场化元年,全球显示大玩家们通过巨额投资、产能改造、跨国并购等形式积极投身其中,希望在次世代显示技术市场快速立足。......关键字:
还在抱怨iPhone的3D Touch技术不好吗?近日,凯基证券分析师郭明池称,苹果或将在下一代OLED版本的iPhone中使用全新的3D Touch模块技术。......关键字:
我 要 评 论
热门关键词

我要回帖

更多关于 ios 循环跑马灯效果 的文章

 

随机推荐