求写一段简单的51单片机C语言代码

P00口每得到一次高电平,LED灯移位一次,计数加1,P00口的高电平来自外接激光传感器... P00口每得到一次高电平,LED灯移位一次,计数加1,P00口的高电平来自外接激光传感器 展开
 我来答
做而论道
高能答主

推荐于2018-03-08 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
#include < reg52.h >
#include <intrins.h>

sbit P00 = P0^0;
void delay(unsigned int ms)
{
unsigned char i;
while(ms--) for(i = 110; i-- ; i > 0);
}

void main()
{
unsigned char LED = 0xfe, COUN = 0;
while(1) {
P1 = LED;
P2 = COUN;
if (P00 == 1) {
delay(2);
if (P00 == 1) {
while (P00 == 1);
LED = _cror_(LED, 1);
COUN++;
} } } }
百度网友56d0baa
2010-10-23 · TA获得超过1138个赞
知道小有建树答主
回答量:500
采纳率:0%
帮助的人:477万
展开全部
单片机检测高电平。1、可以用外部中断,外接激光传感器最好用普通光耦隔离一下,顺便改成低电平触发单片机中断。然后用位移指令移动跑马灯,然后计数值加1. 2、可以用循环检测,也建议用光耦隔离先,在MAIN里面不断检测P00,发现变化后,再次检测以便确认,确认后同样位移一下跑马灯,然后计数加1。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友85c3d63c1
2010-10-23 · 超过20用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:74万
展开全部
假如LED是8位,输出口为PB
void ledshift(void)
{
static uchar i=0x01;
static counter = 0;
if(P00==1)
{
if(counter++%8==0)
{
i = 0x01;
}
i=i<<1;
PB = i;

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式