【51单片机零基础-chapter2:灯独立点亮,自定义点亮,跑马灯点亮,函数】
设置字体
因为STC89C52不在keil软件里,只能用国外的
1.如果是keil4或5的老版本,则找ATMEL里面的at89c52系列
2.新版本,则microchip(因为2016年atmel被microchip收购了)
1
2
keil4里面没有new item
而keil5有,所以拿keil5举例
第一个必须要是main文件
第一个必须要是main文件
第一个必须要是main文件
第一个必须要是main文件
第一个必须要是main文件
第一个必须要是main文件
原来是缺少主函数,此时正确
LED灯
长脚正极短脚负极,如果一样长,则从灯泡内部看,大片为负极,小片一侧为正极
最后一个数字代表0的个数
472=47 00
102=10 00
115=11 00000
1001=100 0
比如滑动变阻器上面的103=10 000
cpu通过我们写的软件(程序)来写值,即控制寄存器来控制硬件电路(驱动器),寄存器为1则表示高电平,硬件电路来执行我们想完成的功能
cpu通过寄存器写值1,则1通过驱动器变为高电平(正),0则低电平
寄存器刚好八个为一组,每个寄存器对应一个p2口
引入头文件,右键insert,当然可以打开该头文件查看更多寄存器信息知识
因为创建的时候选择了否,没有hex文件,所以此时生成
并且会自动创建hex文件
打开stc-isp
选择stc89c52
选择串口
打开
目标文件夹
如果没有亮,更换
点亮第一个灯完毕
注意,单独列出一个句子和while1的效果一样,因为单片机执行完该文件会再次执行
#include <REGX52.H>
void main()
{
//p2=1111 1110;from max to min,but this form is DEC not BIN
/** using HEX will be ok, because 1111=f,1110=e for BINtoHEX*/
P2=0xfe;
}
闪烁功能:利用ISP软件自带的函数delay,复制进U5
注意是毫秒
#include <REGX52.H>
#include <INTRINS.H>//use nop , need include intrins head file
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();//nop is null sentence,show nothing to do , so used to delay time
i = 4;j = 205;k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
P2=0x55;
Delay500ms();
P2=0x55;
Delay500ms();
}
自定义延时+流水灯
自定义延时:
先去生成1ms的延时代码
然后执行x次即总共延时xms
延时1ms
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
延时xms
#include <REGX52.H>
#include <INTRINS.H>//use nop , need include intrins head file
void Delay(unsigned int x)//传参,使延时1ms的函数执行x次
{
while(x--){
unsigned char i, j;
i = 2;
j = 239;
do{while (--j);}
while (--i);
}
}
void main(){
P2=0xFE;Delay(500);
P2=0xFD;Delay(500);
P2=0xFB;Delay(500);
P2=0xF7;Delay(500);
P2=0xEF;Delay(500);
P2=0xDF;Delay(500);
P2=0xBF;Delay(500);
P2=0x7F;Delay(500);
}