控制要求为:(1)正常情况下,8个发光二极管常亮。(2)按下K1时,第1个和第8个 发光二极管闪烁,闪烁间隔时间为1s。(3)按下K2时,8个发光二极管闪烁,闪烁间隔时间 为2s。(4)发光二极管由单片机P0口控制。 程序: #include<reg51.h> #include<stdio.h> #include<intrins.h> sbit P30=P3^0; sbit P31=P3^1; unsigned char count; void delay(unsigned i) { unsigned char a,b,c; for(;i>0;i--) for(c=167;c>0;c--) for(b=171;b>0;b--) for(a=16;a>0;a--); _nop_; } void main (void) { P0=0XFF; while(1) { if (P31==0) while(1) { if (P31==1) break; P0=0X81; delay (1); P0=0; delay(1); } if(P30==0) while(1) { count=0; if (P30==1) break; P0=0; delay(2); P0=0XFF; delay(2); } } }
//只是要注释吗,不才,注释一下
//其实最好有电路图,单片机编程和电路图是一致的
#include<reg51.h>//包含的51单片机头文件
#include<stdio.h>//头文件
#include<intrins.h>//头文件
sbit P30=P3^0;//位定义,定义P30为P3口第0位,即当程序使用P30时候就是P3的第0位
sbit P31=P3^1;//位定义,定义P31为P3口第1位,即当程序使用P31时候就是P3的第1位
unsigned char count;//定义一个计数的
void delay(unsigned i) //延时程序
{
unsigned char a,b,c;
for(;i>0;i--)
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_;
}
void main (void)
{
//正常情况下
P0=0XFF;//P0口初始化,全部置1,各位即 1111 1111,最好如这样写P0 = 0xff
while(1) //程序无限执行
{
if (P31==0) //有按键按下,P3口第1位对应按键
while(1) //有按键按下时,执行
{
if (P31==1) //松开按键时
break; //恢复原始状态
P0=0X81; //P0口LED赋值 1000 0001 即将第8位和第1位点亮
delay (1); //延时
P0=0; //熄灭
delay(1); //延时
}
if(P30==0)//当P3对应的第0位按键按下
while(1) //程序执行
{
count=0; //计数,这个没用到吧
if (P30==1) //松开按键
break;
P0=0; //P0 0000 0000 全灭
delay(2); //延时
P0=0XFF; //P0 1111 1111 全亮
delay(2); //延时
}
}
}
|