Keil软件编写流水灯
这个是不对的,sbit是keil针对51硬件对标准C的扩展P1^x中的x只能是立即数,不能做变量,而且for(x=7;x=4;x--);循环什么都做不了,printf函数在单片机中数据流向串口,因此实现这样的功能这个代码显然无法完成。延时算法最简单的当属--运算。具体实例我给你写一个以供参考:
#include STC12C2052AD.h
void delay(unsigned K){while(K--);}//延时函数
void main()
{
int i=0;
while(1)
{
i++;
i=3;//i在0~3之间变化
P1=~(1(i+4));//因为是P1.4~P1.7低电平有效所以i要先+4再移位结果还要取非
delay(65535);//延时
}
}
keil软件这个流水灯程序怎么写?图片上哪边写错了?能发给我个正确的吗?
错误1,p2小写不行,改成大写P2。
2,那个延时子程序delay(),不能写在主程序中,要写在主程序前面,单独写,主程序去调用它。
3,P2不能写在_corl_()函数中。
4,主程序不能写 int main()
应该这么写
#includereg51.h
#includeintrins.h
void delay()
{
unsigned int a=5000;
while(a--);
}
void main()
{
unsigned char light=0xfe;
P2=0xfe;
while(1)
{
P2=light;
light=_crol_(light,1);
delay();
}
}
keil5跑马灯的实验效果是啥
延时实现LED流水灯效果。端口的八个灯作跑马灯。在本实验中,作为输出口,接8只发光二极管,编写程序,使发光二极管循环点亮。达到延时实现LED流水灯效果。
在keil中,怎么用汇编编写流水灯,先左移再右移,用汇编?
给你参考下,
;左移
star: mov r3,#8 ;设置流水位数
mov p0,#11111110b ;从p0.0开始
loop: acall d01s
mov a,p0 ;读取p0当前数据到acc
rl a ;左移一位
mov p0,a ;将左移的数据再送到p1
djnz r3,loop ;没有完成8位继续
;******************
mov p0,#0ffh ;熄灭所有灯
;******************
;右移
mov r3,#8 ;设置流水位数
mov p0,#01111111b ;从p0.7开始
loop1: acall d01s
mov a,p0 ;读取p0当前数据到acc
rr a ;右移一位
mov p0,a ;将左移的数据再送到p1
djnz r3,loop1 ;没有完成8位继续
ljmp star ;完成后返回到开始再来
;延时子程序
d01s: mov r0,#255
d01l1: mov r1,#198
djnz r1,$
djnz r0,d01l1
ret
end