
你想在应用层编程,也成,好像是直接可以访问底层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
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)