用C语言编写按键控制流水灯的程序

用C语言编写按键控制流水灯的程序,第1张

1灭)。编译器keilc代码如下:#include<reg51.h>#include<intrins.h>//包含循环左移函数_cro_l头文件unsignedchartmp//中间变量////////////////////////////////////////////////////////////////////////////////////////////////////延时子程序////////////////////////////////////////////////////////////////////////////////////////////////voiddelay(unsignedintcnt){while(--cnt)}////////////////////////////////////////////////////////////////////////////////////////////////////主函数////////////////////////////////////////////////////////////////////////////////////////////////main(){while(1)//外层循环{tmp=0xfep1=tmpwhile(1)//内层循环,执行1、3、5、7亮灯循环{delay(30000)//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定tmp=_crol_(tmp,2)p1=tmpif(tmp==0xbf)//判断是否已经点亮到第7灯。是,则退出进入2、4、6、8循环{break}}tmp=0xfdp1=tmpwhile(1)//内层循环,执行2、4、6、8亮灯循环{delay(30000)//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定tmp=_crol_(tmp,2)p1=tmpif(tmp==0x7f)//判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环{break}}}}

要想在linux下访问硬件,最好的办法就是在内核态下编程,将程序编译成ko形式,通过insmod导入系统即可。

你想在应用层编程,也成,好像是直接可以访问底层IO的。但说实话,还没第一种方法方便。

内核态编程,加点头文件,代码里加点标准的声明和初始化,再写个非常简单的Makefile,齐活。

T0 工作模式2 计时器中断,一次200us,1s流水灯左移或右移一次。

k3触发外部中断0,级别高于计时器中断,故暂停。

#include <reg52.h>

#include <intrins.h> 

#define uint unsigned int

#define uchar unsigned char

sbit k1=P1^0 //左循环按钮

sbit k2=P1^1 //右循环按钮

sbit k4=P1^2 //恢复暂停

sbit k3=P3^2//暂停

void init()

void showLED()

void delay(uint xms)

uint delayTime

uint goLeft=1

uint goRight=0

uint sFlag=0

void main()

{

init()

while(1)

{

if(k1==0)

{

delay(10)

if(k1==0)

{

while(k1==0)

goLeft=1

goRight=0

}

}

if(k2==0)

{

delay(10)

if(k2==0)

{

while(k2==0)

goLeft=0

goRight=1

}

}

}

}

void delay(uint xms)

{

uint i,j

for(i=xmsi>0i--)

for(j=112j>0j--)

}

void init()

{

P0=0xfe

TMOD=0x02 //T0 工作模式2 自动装填8位  200us

    TH0=0x38

    TL0=0x38

    EA=1

ET0=1

    TR0=1

EX0=1

IT0=1

}

void showLED()

{

if(goLeft==1)

P0=_crol_(P0,1)

if(goRight==1)

P0=_cror_(P0,1)

}

void moveDelay() interrupt  1 //一次中断200us

{

if(delayTime==5000)

{

showLED()

delayTime=0

}

else

delayTime++

}

void stopLED() interrupt 0

{

while(1)

{

if(k4==0)

{

delay(10)

if(k4==0)

{

while(k4==0)

break

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8727299.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-20
下一篇2023-04-20

发表评论

登录后才能评论

评论列表(0条)

    保存