求高手帮我解释下这程序 本人是新手 解析详细。 求助
控制要求为:(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(unsignedi){ 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(unsignedi)//延时程序
{
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; //P00000 0000全灭
delay(2);//延时
P0=0XFF; //P0 1111 1111全亮
delay(2); //延时
}
}
} :D老兄
我看你还是编个PLC好得多 程序看得似懂非懂哎那个P0是控制发光二极管的端口 有八个发光二极管,估计是个8位的二进制,每个位控制相应的二极管,main()函数的一开始就把0xff赋给P0 应该是P0的某位为1,则对应的二极管为亮的状态吧;然后进入一个死循环,循环一开始判断P31是否为0,是则执行一个循环,直到P31等于1跳出循环,每循环一次把0X81赋给P0,即把10000001赋给P0,这样八个二极管的第1个和第8个发光二极管亮,第2~7个发光二极管暗,然后调用delay函数,再把0赋给P0,这样发光二极管就全部为暗的状态,然后再调用delay函数,P31应该是K1的状态,K1按下时为0,K1没有按下时则为1,而delay函数应该是延迟函数,把一个n做实参发给delay( ),则延迟n秒再执行后面的语句,这里把1发给delay函数,所以是延迟1秒,这样一直循环直到放开K1,每循环一次第1个和第8个发光二极管闪烁一次;第二个if判断P30是否为0,是则再执行一个循环,循环跟上面差不多,把0赋给P0,则全部二极管暗,隔两秒把0XFF赋给P0,则全部二极管亮,然后停两秒继续,直到P30等于1退出循环不知道对不对,个人理解,仅供参考:$ rencaixiaomeng 发表于 2012-6-20 17:30 static/image/common/back.gif
程序看得似懂非懂哎那个P0是控制发光二极管的端口 有八个发光二极管,估计是个8位的二进制,每个位控制相 ...
老兄你解释有一点不对啊,“把10000001赋给P0,这样八个二极管的第1个和第8个发光二极管亮,第2~7个发光二极管暗”这个我不敢苟同我感觉现在的单片机板都是要在端口为0的时候才使发光二级管发亮的,除非这个是他自己做的电路板,我看了楼主的程序我感觉相当的不规范,可能还没有学好就写了啊。 楼主的延时函数写的太神器了,还有就是不规范,比如说应该是程序分层设计才好 这程序好像错的地方很多哈。 笨鸟不飞已经给你注释得很详细了
正如他说的一样最好把原理图一起发上来
页:
[1]