1、清启带51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#include<reg51.h> //51单片机头文件#include <intrins.h> //包含有左右循环移位子函数的库
#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=zx>0x--)
for(y=110y>0y--)
}
void main() //主函数
{
uchar a,i,j
while(1) //大循环
{
a=0xfe //赋初值
for(j=0j<3j++) for(i=0i<8i++) //左移三次
{
P1=a //点亮小灯
beep=0 //开启蜂鸣器
delay(50) //延时50毫秒
beep=1 //关闭蜂鸣器
旁洞 delay(50) //再延时50毫秒
a=_crol_(a,1) //将a变量循环左移一位
}
a=0x7f
for(j=0j<3j++) for(i=0i<8i++) 答芦 //右移三次
{
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单片机是基础入门的一个单片机,还是应用最广泛的一种。
程序如下,仿真见附件。森猛局有问题请追问。#include <AT89X51.h>
#define uchar unsigned char
#define uint unsigned int
bit flag_1s=0
uchar code tab[8]={1,2,4,8,16,32,64,128}//[第1小题用这个表]
//uchar code tab[8]={0x05,0x0a,0x50,0xa0,0xaa,0x55,0xff,0x00}//[第2小题用这个表]
void InitTimer1(void)
{
TMOD = 0x10
TH1 = 0x3C
TL1 = 0x0B0
EA = 1
此让ET1 = 1
TR1 = 1
}
void main(void)
{
static uchar j
InitTimer1()
P0=0
P1=0
P2=0
P3=0
flag_1s=1
while(1)
{
if(flag_1s==1)
{
flag_1s=0
P2=tab[j]
j++
if(j>=8) j=0
}
}
}
void Timer1Interrupt(void) interrupt 3
{
static uchar i
TH1 = 0x3C
TL1 = 0x0B0
//add your code here!
i++
if(i>=20)//50ms*20=1000ms
知配 {
i=0
flag_1s=1
}
}
第4题89S51 单片机的P1 口接有 8个 LED,当某一端口输出为“0”时,相应的 LED 点亮,P3.2、P3.3、P3.4、P3.5 分别接有四个按钮 K1~K4,按下按钮时,相应引脚被接地。现要求编写可键控的流水灯程序,当 K1 按下时,开始流动,K2 按下悄镇时停止流春森动,全部灯灭,K3 使灯由上往下流动,K4 使灯由下往上流动。
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
void mDelay(unsigned int DelayTime)
{ unsigned int j=0
for(DelayTime>0DelayTime--)
{ for(j=0j<125j++)
{} }}
uchar Key()
{ uchar KeyV
uchar tmp
P1=P1|0x3c//四个按键所接位置
KeyV=P1
if((KeyV|0xc3)==0xff) //无键按下
return(0)
mDelay(10) //延时,去键抖
KeyV=P1
if((KeyV|0xc3)==0xff)
return(0)
else
{ for(){ tmp=P1
if((tmp|0xc3)==0xff)
break}
return(KeyV)}}
void main()
{ unsigned char OutData=0xfe
bit UpDown=0
bit Start=0
uchar KValue
for()
{ KValue=Key()
switch (KValue)
{ case 0xfb: //P3.2=0,Start
{ Start=1
break}
case 0xf7: //P3.3=0,Stop
{ Start=0
break}
case 0xef: //P3.4=0 Up
{ UpDown=1
break}
case 0xdf: //P3.5=0 Down
{ UpDown=0
break}
}
if(Start)
{ if(UpDown)
OutData=_crol_(OutData,1)
else
OutData=_cror_(OutData,1) P2=OutData
}
else
P2=0xff//否启森粗则灯全灭
mDelay(1000)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)