单片机的最小系统:
1.晶振电路
2.复位电路
3.电源电路
4.下载电路
各个电路具体的原理不清楚楚。
点亮led,led的单向导通,普中开发板采用共阳极接法,并在led后串联电阻限流,led阴极接51芯片,所以当51单片机I/O接口为低电平是,led导通发光,用逻辑0表示。
#include "reg52.h"//51单片机的头文件
sbit LED1=P2^0;// sbit为重定义 将p2.0定义成led1 ,后面可以用led1直接控制p2.0
void main()
{
LED1=0;//低电平,led亮
while(1)//空循环,应该可以删掉
{
}
}
led闪烁
函数的运行和写法不了解
#include "reg52.h"
sbit LED1=P2^0;
void delay_10us(int ten_us)
{
while(ten_us--)//延时函数,需要进一步学c语言了解
;
}
void main()
{
while(1)
{
LED1=0;
delay_10us(50000);//led闪烁即为亮之后延时然后灭再延时,并循环
LED1=1;
delay_10us(50000);
}
}
流水灯
循环里面加入别的端口的循环
#include "reg52.h"
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;
void delay_10us(int ten_us)
{
while(ten_us--)
;
}
void main()
{
while(1)
{
LED1=0;
delay_10us(50000);
LED1=1;
delay_10us(50000);
LED2=0;
delay_10us(50000);
LED2=1;
delay_10us(50000);
LED3=0;
delay_10us(50000);
LED3=1;
delay_10us(50000);
LED4=0;
delay_10us(50000);
LED4=1;
delay_10us(50000);
LED5=0;
delay_10us(50000);
LED5=1;
delay_10us(50000);
LED6=0;
delay_10us(50000);
LED6=1;
delay_10us(50000);
LED7=0;
delay_10us(50000);
LED7=1;
delay_10us(50000);
LED8=0;
delay_10us(50000);
LED8=1;
}
}
或用for循环
#include "reg52.h"
unsigned char tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;//定义一个数组
void delay_10us(int ten_us)
{
while(ten_us--)
;
}
void main()
{
unsigned char a;
while(1)
{
for(a=0;a<8;a++)
{
P2= tab[a] ;//即p2为tab数组中第a个元素
delay_10us(50000);
}
}
}
因为之前有用sbit重定义,本想尝试定一个LED【a】的数组,来实现循环,用led【a】=0,delay,led【a】=1;delay模仿闪烁的那个程序实现,但是没成功。
#define LED P2 //#宏定义 将p2端口定义为led
void delay_10us(int ten_us)
{
while(ten_us--)
;
}
void main()
{
int i;
LED = ~0x01; // 00000001 d8-d1 对应p2.7-p2.0
delay_10us(50000);
while(1)
{
for(i=1;i<8;i++)
{
LED = _crol_(LED,1); //左移7次 左移0000 0001一次 变为0000 0010 以一个圆循环左移
delay_10us(50000);
}
for(i=1;i<8;i++)
{
LED = _cror_(LED,1); //右移7次
delay_10us(50000);
}
}
}
用移位的函数实现
#include "reg52.h"
#define LED P2
void delay_10us(int ten_us)
{
while(ten_us--)
;
}
void main()
{
unsigned char a;
while(1)
{
for(a=0;a<8;a++)
{
LED=~(0x01<
这一段是用移位操作符和for循环进行实现,移位0000 0001并将结果按位取反,使得只有一个led亮
仅是学习的记录



