AT89S52:
P0:不含上拉电阻,需要外接
P1,P2,P3:内部含上拉电阻
左下方是个晶振
51单片机的复位是高电平复位(默认是高电平输出)-如何复位:赋予高电平脉冲
复位的接入方法
如何复位详解:RST含高电平脉冲
复位键断开:RST是低电平(接地)
复位键闭合:闭合回路上,RST获得高电平,计算V(rst) = 4.7 v 为高电平
搭建最小系统:
接入晶振
接入RST
接入上拉电阻并为上拉电阻提供VCC
EA接入VCC(代表使用片内存储器) 接入0(代表使用片外存储器)
解释573芯片:
OE上加-:低电平有效,高电平无效。
Z:高组态,既不是高,也不是低。接什么平是什么平,相当于芯片没有工作
Q0:维持原来的状态不改变。
排阻的九个引脚:接入VCC的COM脚是八个电阻共接在一起的。1K的阻值:发光二极管的正向导通电压(1.6-1.7V)除以流过的电流
(3-10mA)
如何点亮图中二极管:
VCC已经提供高电平,保证负极的低电平。
P0i对应第i+1个二极管=》P0i依次设置成低电平。
循环
点亮灯:
#include
sbit led1 = P0^0;
int main()
{
while(1){
//线操作
P0 = 0xfe;
//位操作
led1 = 0;
}
return 0;
}
闪烁灯:
#include
#define uint unsigned int
void delay(uint a){
while(a–)
;
}
int main()
{
while(1){
P0=0xfe;//11111110
delay(50000);//并不是精确的秒数,而是一个大致的时间间隔
P0=0xff;//11111111
delay(50000);
}
return 0;
}
流水灯:
位操作:
#include
sbit led0=P0^0;
sbit led1=P0^1;
sbit led2=P0^2;
sbit led3=P0^3;
sbit led4=P0^4;
sbit led5=P0^5;
sbit led6=P0^6;
sbit led7=P0^7;
void delay(void)
{
unsigned char a,b;
for(a=0;a<200;a++)
for(b=0;b<200;b++);
}
void main()
{
while(1)
{
led0=0;
delay();
led0=1;
delay();
led1=0;
delay();
led1=1;
delay();
led2=0;
delay();
led2=1;
delay();
led3=0;
delay();
led3=1;
delay();
led4=0;
delay();
led4=1;
delay();
led5=0;
delay();
led5=1;
delay();
led6=0;
delay();
led6=1;
delay();
led7=0;
delay();
led7=1;
delay();
}
}
2.线操作:
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
/*
1111 1110
1111 1101
1111 1011
1111 0111
1110 1111
1101 1111
1011 1111
0111 1111
*/
void delay(void)
{
uchar a,b;
for(a=0;a<200;a++)
for(b=0;b<200;b++);
}
void main()
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
P0=table[i];
delay();
}
}
}
方法三:位运算
#include
#define uchar unsigned char
#define uint unsigned int
void delay(void)
{
uchar a,b;
for(a=0;a<200;a++)
for(b=0;b<200;b++);
}
void main()
{
uchar k,i;
while(1){
k=0xfe;//11111110
for(i=0;i<8;i++)
{
P0=k; //1111 1110
delay();
k=k<<1; //1111 1100
k=k|0x01; //1111 1101
//0x01:0000 0001(把最低位 或 为1)
}
}
}
方法四:函数
#include
#include
#define uchar unsigned char
#define uint unsigned int
void delay(void)
{
uchar a,b;
for(a=0;a<200;a++)
for(b=0;b<200;b++);
}
void main()
{
uchar k;
k=0xfe;
while(1)
{
P0=k;
delay();
k=_crol_(k,1);
/*
1111 1110
1111 1101
—
0111 1111
*/
}
}
软件仿真:debug
利用软件仿真测试语句间的执行时间:
开启debug
设置断点在起始位置
run
t1 = sec
设置断点在起始位置
run
t2 = sec
时间间隔 = t2-t1
设置与硬件同频率的晶振:
点击目标选项按钮
点击项目
点击始终:设置成与硬件符合的时钟(晶振)。
关键字: 编辑:什么鱼 引用地址: