问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

51单片机16路流水灯怎么用C语言写,并求每个步骤的讲解

发布网友 发布时间:2022-05-02 09:35

我来回答

4个回答

热心网友 时间:2022-06-18 22:45

我给你个简单的例子:

#include <AT89X51.H> //预处理文件里面定义了特殊寄存器的名称如P1 口定义为P1

void main(void)

{

//定义花样数据

const unsigned char design[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,

0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,

0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,

0xE7,0xDB,0xBD,0x7E,0xFF};

unsigned int a; //定义循环用的变量

unsigned char b; //在C51 编程中因内存有限尽可能注意变量类型的使用

//尽可能使用少字节的类型,在大型的程序中很

受用

do{

for (b=0; b<32; b++)

{

for(a=0; a<30000; a++); //延时一段时间

P1 = design[b]; //读已定义的花样数据并写花样数据到P1 口

}

}while(1);

}

程序中的花样数据可以自以去定义,因这里我们的LED 要AT89C51 的P1 引脚为低电平才

会点亮,所以我们要向P1 口的各引脚写数据O 对应连接的LED 才会被点亮,P1 口的八个引

脚刚好对应P1 口特殊寄存器的八个二进位,如向P1 口定数据0xFE,转成二进制就是

11111110,最低位D0 为0 这里P1.0 引脚输出低电平,LED1 被点亮。如此类推,大家不难算

出自己想要做的效果了。 

留个邮箱给你发个入门文档

热心网友 时间:2022-06-18 22:46

看看这个也许能行
//*******************************************************
#define Byte unsigned char
#define Word unsigned int
#define DWord unsigned long
//*******************************************************
#define Speed 12 //12 MHz(注意更高就不能一次得到50ms定时了)
#define TTTT 50000 //50ms
#define TH1_Init_Val (65536-Speed * TTTT / 12)/256
#define TL1_Init_Val (65536-Speed * TTTT / 12)%256

sbit L1 = P1^0 ;
sbit L2 = P1^1 ;
sbit L3 = P1^2 ;
sbit L4 = P1^3 ;
sbit L5 = P1^4 ;
sbit L6 = P1^5 ;
sbit L7 = P1^6 ;
sbit L8 = P1^7 ;
//*******************************************************模块变量
bit flag1s ;

//*******************************************************T1初始化
void T1_Init()
{
TMOD= 0x11;
TH1=TH1_Init_Val ;
TL1=TL1_Init_Val ;
ET1 =1;
EA =1;
TR1 =1;
}

/*******************************************************LED主进程

第一秒钟L1,L3亮,
第二秒钟L2,L4亮,
第三秒钟L5,L7亮,
第四秒钟L6,L8亮,
第六秒钟L2,L4,L6,L8亮,
第七秒钟八个二极管全亮,
第八秒钟全灭
[可以将P0口各时刻的状态做个表格,这里就不做了]
********************************************************/
void Led_Run()
{
static Byte step;
if (!flag1s)return; //接收定时器“flag1s”消息,没到1s返回
flag1s = 0; //1s到则开始工作

step++;
switch(step) //以1s为间隔进行顺序控制
{
case 1:
P1 =0xff; //先熄灭
L1 = 0;
L3 = 0;
break;
case 2:
P1 =0xff; //先熄灭
L2 = 0;
L4 = 0;
break;
case 3:
P1 =0xff; //先熄灭
L5 = 0;
L7 = 0;
break;
case 4:
P1 =0xff; //先熄灭
L6 = 0;
L8 = 0;
break;
case 5:
//do nothing 维持第4秒内容
break;
case 6:
P1 =0xff; //先熄灭
L2 = 0;
L4 = 0;
L6 = 0;
L8 = 0;
break;
case 7:
P1 = 0x00; //全亮
break;
case 8:
P1 =0xff; //全灭
step = 0; //步骤复位
break;
default:
step = 0; //具有一定的抗干扰意义
break;
}
}
//*******************************************************主程序
void main()
{
T1_Init();
while(1)
{
Led_Run();
}
}

void ISR_T1() interrupt 3 using 2 //定时器1中断服务程序50ms
{
static Byte cnt1s;
TH1=TH1_Init_Val ;
TL1=TL1_Init_Val ; //reload val
if (++cnt1s >= 20)
{
cnt1s = 0;
flag1s = 1;
}
}

热心网友 时间:2022-06-18 22:46

这个没有0实验板原理图,没法写哈。
大概就是先定义一下管脚,再向管脚写ff或00初始化。再把第一个灯点亮,再关掉第一个灯,再点亮第二个灯。。。 。。。把它放在do循环里就OK了,
熟练了后,加个for循环简化一下程序,设几个变量就行了。

热心网友 时间:2022-06-18 22:47

#include "reg52.h"
#include "intrins.h"
void Delay(unsigned int t)
{
unsigned i;
while(t--!=0)
{
for(i=0;i<500;i++)
{;}
}
}
void main(void)
{
unsigned char temp,num1,num2;
P0=0xff;
p1=0xff;
while(1)
{
temp=0xfe;
for(num1=0;num1<8;num1++)
{
P0=temp;
p1=0xff;
Delay(100);
temp = _crol_(temp , 1);
}
temp=0x7f;
for(num2=0;num2<8;num2++)
{
P0=temp;
p1=0xff;
Delay(100);
temp =_cror_(temp,1);
}
temp=0xfe;
for(num1=0;num1<8;num1++)
{
P1=temp;
p0=0xff;
Delay(100);
temp = _crol_(temp , 1);
}
temp=0x7f;
for(num2=0;num2<8;num2++)
{
P1=temp;
p0=0xff;
Delay(100);
temp =_cror_(temp,1);
}
}
}
16个二极管分别接到p0口和p1口.....
参考资料:http://zhidao.baidu.com/question/324586572.html
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
iOS 16.1.1值得更新升级吗 ios16.1.1正式版建议更新吗 iOS 16.1.1修复了哪些问题 ios16.1.1值得更新吗?ios 16.1.1新增内容及更新建议 iPhone 12升级iOS 16.1.1之后好用吗 iOS 16.1.1更新内容介绍 iOS 16.1正式版新增了哪些新功能?iOS 16.1正式版值得升级吗? ios 16.1正式版解决了哪些问题和BUG ...森先生是他“最好的老师” 你喜欢这样的老师吗? ... 你喜欢怀特森这样老师吗?说说你的看法.250字 怎么才能把衣服染成白色?有没什么方法? 51单片机C语言对流水灯编程,用定时中断做 51单片机流水灯程序求助,求C语言程序!!! 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS) 求助51单片机流水灯程序 51单片机定时器实现流水灯,并用按键外部中断控制改变流水灯的流向,这个程序怎么写?最好有注释,谢谢 动态网站建设,关于一个西餐厅,什么板块适合 51单片机中如何用汇编语言编写流水灯 电子商城系统的网站建设,程序上的难点主要是有那些地方?怎么避免?_百... 51单片机c语言定时器控制流水灯 餐饮业网络营销要注意什么 当涂西餐厅网站如何建 网站建设的最难点在哪? 菜鸟求助西餐厅网站建设 年龄大了玩 Switch 什么感受? switch如何拿着不累 浩浩冒险岛_2022服务端控制台太大了点不到启动服务端 经常发现微信群中经常有群外人员潜入抢红包,抢完后又离开了。怎样防止群外人员潜入微信群? 我建立了个微信群.删了一个捣乱的群成员.可为什么发红包的时候他还会*的出现在群里抢红包?而我却 精密空调底部是否一定要安装蓄水池 51单片机的流水灯程序— 白色衣服被掉色的衣服给染上颜色了 有没有什么办法再让衣服变回原来的白色?? 求一道C51单片机的流水灯编程,具体程序要求如下。 求一个51单片机流水灯程序! 51单片机,用定时器中断,在P1口实现1S移动一次的流水灯,用汇编语言编写的程序 被染色的衣服除了用84 还有什么方法去色?衣服是白色的 我的手机被标为服务快递怎样才能取消 手把手教你学单片机课后习题答案:关于用定时器着流水灯程序? 51单片机用定时器实现流水灯左右移动? 指定的服务已标记为删除怎么解决 wifi放大器是什么啊? 华为rioul00是麦芒4吗 跨境电商收款平台空中云汇的云汇Visa卡业务真的很好用吗? 跨境电商收款平台空中云汇的云汇Visa卡业务体验如何? 金融类研究生留学去哪个国家比较好?需要TOEFL还是IELTS还是GMAT还是什么? 没有双币信用卡怎么做跨境电商 学金融,出国留学,到底是哪个国家的哪个大学最好阿? 金融专业去哪里留学比较好?英国还是美国? 金融专业哪个国家留学好 虾皮跨境电商要开什么样的双币卡?