⑴ 用c语言编写按键控制流水灯的程序
1灭)。编译器keil
c代码如下:
#include<reg51.h>
#include<intrins.h>
//包含循环左移函数
_cro_l头文件
unsigned
char
tmp;
//中间变量
//////////////////////////////////////////////////////////////////////////////////////////////////
//
延时子程序
////////////////////////////////////////////////////////////////////////////////////////////////
void
delay(unsigned
int
cnt)
{
while(--cnt);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//
主函数
////////////////////////////////////////////////////////////////////////////////////////////////
main()
{
while(1)
//外层循环
{
tmp
=
0xfe;
p1
=
tmp;
while(1)
//内层循环,执行1、3、5、7亮灯循环
{
delay(30000);
//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp
=
_crol_(tmp,2);
p1
=
tmp;
if(tmp
==
0xbf)
//判断是否已经点亮到第7灯。是,则退出进入2、4、6、8循环
{
break;
}
}
tmp
=
0xfd;
p1
=
tmp;
while(1)
//内层循环,执行2、4、6、8亮灯循环
{
delay(30000);
//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp
=
_crol_(tmp,2);
p1
=
tmp;
if(tmp
==
0x7f)
//判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环
{
break;
}
}
}
}
⑵ 如何用两个按键控制16个流水灯的流速 要求共8个流动速度 (c语言程序)
//用两个按键控制16个流水灯的流速 要求共8个流动速度
#include<reg52.h>
void delay(unsigned char k) //延时函数
{
unsigned char i,j; //定义两个变量,用于空循环
k=k*8;
for(i=0;i<k;i++)
for(j=0;j<255;j++)
;
}
unsigned char flag;
void main()
{
unsigned char i;
flag=1;
EA=1; //开放总中断
EX0=1; //允许使用外中断
IT0=1; //选择负跳变来触发外中断
EX1=1; //允许使用外中断
IT1=1; //选择负跳变来触发外中断
while(1) //用于反复循环
{
for(i=0;i<9;i++)
{
P1=~(1<<i);
delay(flag); //调用延时函数
//while(flag!=1);
}
for(i=0;i<9;i++)
{
P2=~(1<<i);
delay(flag); //调用延时函数
//while(flag!=1);
}
i=0;
//
}
}
/**************************************************************
函数功能:外中断T0的中断服务程序
**************************************************************/
void int0(void) interrupt 0 using 0 //用于减小流水灯速度
{
if(flag<9)
flag++;
}
/**************************************************************
函数功能:外中断T0的中断服务程序
**************************************************************/
void int1(void) interrupt 2 using 0 //用于增加流水灯速度
{
if(flag>1)
flag--;
}
⑶ 单片机C语言编程——关于按键改变循环流水灯流向(切换运行状态)
void smg1()
{
wela=1;
P0=0xfe;
//这中间如果没延时,则后面的状态会没等你看清楚就被后面的状态覆盖了
wela=0;
la=1;
P0=0x77;
//这中间如果没延时,则后面的状态会没等你看清楚就被后面的状态覆盖了
la=0;
}
smg2也是相同的道理;
void key()
{
if(s2==0)
delay(10);
if(s2==0)
{
a=~a; //如果a定义为int型,当它为1时,对它取反并不是0,除非定义为位数据.
while(!s2);
}
}
⑷ 单片机C语言 两个按键控制8位花样流水灯,P1.0接按键k1,P1.1接按键k2,P0口的8位接8个发光二极管
汇编程序如下:
; 花样流水灯(8个发光二极管以各种形式循环点亮)
; 功能:流水灯(8个发光二极管循环以1S间隔以各种形式循环点亮)
ORG H ;伪指令,指定程序从H开始存放
LJMP MAIN ;跳转指令,程序跳转至MAIN处执行
ORG H ;伪指令,指定程序从H开始存放
MAIN: MO SP, #60H ;给堆栈指针赋初值
MO P1,#0FFH ;给P1口赋值
MO DPTR,#TABLE;查表
LIGHT: MO R4,#42 ;设置循环次数
LOOP: MO A,#42 ;给A赋初值
SUBB A,R4 ;将A的值与R4的值相减,结果存在A中
MOC A,@A+DPTR ;将A+DPTR的值所坦好大对应的TABLE中的值赋给A
MO P1,A ;将A的值赋给P1口
LCALL DEL1S ;调用1S延时子程序
DJNZ R4,LOOP ;判断R4是否为0,不为0跳转,为0顺序执行
LJMP LIGHT ;跳转指令,跳转至LIGHT处继续执行
;1S延时子程序(11.MHz晶振,误差0微秒)
DEL1S: MO R5, #H
DL1S0: MO R6, #0A4H
DL1S1: MO R7, #H
DJNZ R7, $
DJNZ R6, DL1S1
DJNZ R5, DL1S0
RET
TABLE: ;定义表格数据
DB 0FFH ;全灭
DB 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 07FH ;依次逐个点亮
DB 0FEH 0FCH 0F8H 0F0H 0E0H 0C0H H H ;依次逐个叠加
DB H 0C0H 0E0H 0F0H 0F8H 0FCH 0FEH 0FFH ;依次逐个递减
DB 07EH 0BDH 0DBH 0E7H 0E7H 0DBH 0BDH 07EH ;两边靠拢后分开
DB 07EH 03CH H H H H 03CH 07EH ;两边叠加后递减
DB H ;全亮
END ;程序结束指令
C语言程序如下:
/* 该实验是花样流水灯(8个发光二极管以各种袜敏方式循让竖环点亮),功能是花样流水灯(8个发光二极管以1S间隔以各种方式循环点亮) */
#include//包含reg.52文件
#define uint unsigned int//宏定义
#define uchar unsigned char//宏定义
void delay(uint z);//声明延时函数
uint a;//定义循环用变量
uchar code table[]={
0xff,//全灭
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐个点亮
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐个叠加
0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐个递减
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//两边靠拢后分开
0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后递减
0x00,//全亮
;//¶¨ҥѭ»·Ӄʽ¾ݱ
/*Aµď֏ȊLj«ð£¬ȻºΖぁ£¬ȻºΖ
ȻºΖݼ»º߿¿£ºª£¬Ȼºߵݼ
ºa£ѭ»·£¡*/
void in()//inº¯ʽ
{
a=0;//¸
while(1)//whileѭ»·
{
P1=table[a];//½«a˹ԚµableµĖµ¸³¸
delay();//1Sѓʱד³̐ɠ a ;//aµĖµ¼Ӓ»
if(a==42)//²⊔aʇ·Ƥ2
a=0;//¸µ
}
}
void delay(uint z)//1msѓʱד³̐¨¹±䑓ʱʱ¼F{
uint x,y;
for(x=z;x
⑸ 流水灯c语言程序
我是一名多年的单片机工程师,下面的程序你参考一下
效果图
程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint i;
uchar j;
void delay_ms(uint k) //延时子程序
{
for(i=0;i<k;i++)
{
for(j=0;j<230;j++)
{
;
}
}
}
main()
{
uchar a,b;
P1=0xfe;
delay_ms(1000);
b=P1;
while(1)
{
for(a=0;a<7;a++)
{
b=_crol_(b,1);
P1=b;
delay_ms(1000);
}
for(a=0;a<7;a++)
{
b=_cror_(b,1);
P1=b;
delay_ms(1000);
}
}
}
如果你想学习更多单片机和程序的知识,可以看看我整理好的“17个实验学会单片机”,网络一下“17个实验学会单片机”就可以看到在首页了。