学的时候感觉还不错,但是由于摆烂太久了,一下子就去搞其他事情去了,所以学的比较少,明天要更专注一些,加油加油!
C51单片机基础
数据类型
注意:int以及unsigned int诸如此类的区别,二者都是16位,但是unsigned int全是正数,而int包括正数和负数部分
Keil
新建项目工程:
选择单片机型号(Atmel——AT89C52)
在建好的项目下 Target1——右击Source Group 1——add new item to ...——新建C文件
写代码...
写好之后点击图示按钮——Output——✔创建HEX File——OK——再次编译
数字+倍率
102 = 10 00 =1K
473 = 47 000 =47K
1001 = 100 0=1K
基础
CPU通过控制寄存器控制硬件电路,以执行想要完成的功能
VCC即电源正极
单片机(MCU)采用TTL电平
即:高电平 +5
低电平 0
也就是说:VCC 接 5 LED不亮
VCC 接 0 LED亮
单片机控制硬件电路原理图:
语句中需要用十六进制,故需要将类似 11111110 的二进制数转为十六进制,并以 0x 开头
STC
单片机型号: STC89C52RC
软件延时计算器
进行如下设置:
实战小项目
流水灯
#include <REGX52.H>
#include <INTRINS.H>
//延时函数 STC生成
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_(); //来自头文件<INTRINS.H>
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0xFE; //1111 1110
Delay500ms();
P2=0xFD; //1111 1101
Delay500ms();
P2=0xFB; //1111 1011
Delay500ms();
P2=0xF7; //1111 0111
Delay500ms();
P2=0xEF; //1110 1111
Delay500ms();
P2=0xDF; //1101 1111
Delay500ms();
P2=0xBF; //1011 1111
Delay500ms();
P2=0x7F; //0111 1111
Delay500ms();
}
}
流水灯PLUS
#include <REGX52.H>
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1)
{
P2=0xFE; //1111 1110
Delay1ms(500);
P2=0xFD; //1111 1101
Delay1ms(500);
P2=0xFB; //1111 1011
Delay1ms(500);
P2=0xF7; //1111 0111
Delay1ms(500);
P2=0xEF; //1110 1111
Delay1ms(500);
P2=0xDF; //1101 1111
Delay1ms(500);
P2=0xBF; //1011 1111
Delay1ms(500);
P2=0x7F; //0111 1111
Delay1ms(500);
}
}
注意:主要的修改就是将延时函数设置成可自己调控的变量,利用循环实现,也就是将1ms的间隔循环x次
- THE END -
最后修改:2023年7月20日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://xyhelper.top/679
共有 0 条评论