1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#include<reg51h> //51单片机头文件#include <intrinsh> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms
{ //delay(500);大约延时500ms
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
假设有五个灯Q01-Q05,一个启动按钮I00,一个停止按钮I01
实验原理:当按下-I00的时候灯Q01亮,亮3S后Q02亮以此类推,到Q05亮万后又开始循环直到你按下停止按钮方可挺。这是一个简单的基础题目,如果想控制自动停止也可以。占用PLC的IO模块有两个输入五个输出。
#include<reg52h>
#include<intrinsh>
#define uint unsigned int
#define uchar unsigned char
#define led P1
uint delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=110;y>0;y--);
}
}
void main()
{
uint i,temp,j;
for(i=0;i<3;i++)
{
led=0xAA;
delay(300);
led=0x55;
delay(300);
}
for(i=0;i<3;i++)
{
temp=0xfe;
for(j=0;j<8;j++)
{
led=temp;
delay(300);
temp=_crol_(temp,1);
}
temp=0xbf;
for(j=0;j<6;j++)
{
led=temp;
delay(300);
temp=_cror_(temp,1);
}
}
for (i=0;i<3;i++)
{
led=0x7e;
delay(300);
led=0xbd;
delay(300);
led=0xdb;
delay(300);
led=0xe7;
delay(300);
}
for (i=0;i<3;i++)
{
led=0xe7;
delay(300);
led=0xdb;
delay(300);
led=0xbd;
delay(300);
led=0x7e;
delay(300);
}
for (i=0;i<3;i++)
{
led=0xff;
delay(300);
led=0x00;
delay(300);
}
led=0xff;
while(1);
}
现象说明:
8个灯,间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环
三次;再分别从两边往中间流动三次;再从中间往两边流
动三次;8个全部闪烁3次;关闭发光管,程序停止。
晶振为110592MHz
一个小的程序是不需要专门绘制流程图的。其实在初学阶段,画好流程图能帮助我们整理好程序设计的脉络,让程序变得有条理。在编程的时候,流程图像一个指路明灯引领着程序的走向,所以应该养成良好的习惯,在编写程序之前,绘制一份流程图。
流程图的绘制方法很简单,一些编程类书籍有过专门的介绍,在本书就不再讲述了。怎样才能达到我们演示的流水灯的效果,就是让P1端口在间隔一段时间后,输出不同的值?假设我们想要的效果是某一时刻,只有一个LED小灯亮,而间隔的时间是一秒,当I/O端口输出高电平的时候,LED小灯是不亮的,当I/O端口输出低电平的时候,LED小灯才亮。如图所示,P1的值用十六进制可以表示为FEH,因为四位二进制数可以表示一位十六进制数。我们得出在不同LED小灯被点亮的时候,P1端口输出的状态程序流程图还是比较简单的,P1口在间隔一段时间之后,输出不同的值,然后返回到程序执行的起点,重新开始执行,这样就会循环往复不断地出现流水的效果。
在任意位置建立一个专门用于存放单片机试验程序的文件夹,启动keil c51 集成开发环境。新建一个工程项目,点击project,new project放到我们上一步新建的文件夹中选取相应的单片机芯片,选取相应的CPU。本实验使用89c52芯片,在这里选取Atmel 公司的AT89C52新建一个文本,点击filenew或Ctrl+n或点击工具栏的空白文本,然后保存到我们的工程文件夹中,名字后缀改为c文件点击图一所示图标,修改一下配置,改为12mhz,选择生成hex文件,然后找到project窗口的source group右键选择add files to group找到我们新建的"c"文件
写入相应的程序,下面解释一下这个程序#include <reg52h> //此文件中定义了51的一些特殊功能寄存器#define uint unsigned int; 这是个延时的程序,运用两个镶嵌for语句以for(i=0;i<500 ;i++)为例 i赋值为0,当判断i是否小于500,若是那就跳出for语句,否则运行for语句内为主函数 while() 为循环语句当 ()内的数为真时循环, 为假时跳出循环, 括号内非零为真,零为假 0xfe=二进制的1111 1110点击rebuild图标,提示没有检查出没有错误方可,若有错误就要修改启动proteus仿真软件,如图制作好,双击单片机,选择好我们制作好的hex的文件。点击开始就可以看到流水灯的效果啦把程序下载到开发板中就可以看到实际的流水灯效果。
以上就是关于很简的51单片机C语言流水灯程序全部的内容,包括:很简的51单片机C语言流水灯程序、跪求高手编写PLC流水灯实验程序、单片机流水灯的C语言编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)