在这里,把学习视频时的笔记进行记录,在学习视频的过程中,遇到了一些视频中没有讲解到的问题,对于这些问题的解决过程在这里进行记录和总结。
优快云的对齐格式有点诡异,在编辑器中注释都是对齐的,在优快云的文章中显示的有一些不能对齐,为了让大家复制粘贴代码的时候能够获得对齐的注释,在这里就对文章中没有对齐的格式不予处理了。
实践第一。
补充必要的理论知识,即缺什么补什么。
做工程项目积累经验。(可在网络上搜集题目,也可自己有什么想法大胆的去试验)
数字电路中只有两种电平:高和低
定义单片机为TTL电平:
高 +5V 低 0V
RS232电平:计算机的串口
高 -12V (RS232电平高电平为负) 低+12V
所以计算机与单片机之间通讯时需要加电平转换芯片max232(实验板上左下角)。
单片机命名:STC(STC公司)89(系列)C(COMS)52(内部存储空间大小:4K*2=8K)RC
40(所支持的晶振频率是40MHZ)C(商业级,如I是工业级,区别是温度适用范围,还有军品级)-PDIP(封装格式,这里是双列直插式,还有BGA等封装)
07(07年)21(21周)CV4336
总线(BUS)是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是CPU内部之间的连线。外部总线是指CPU与其它部件之间的连线。 外部总线有三种: 数据总线DB(Data Bus), 地址总线 AB(Address Bus)和控制总线 CBControl Bus)。
sfr:特殊功能寄存器声明
sfr16:sfr的16位数据声明
sbit:特殊功能位声明
bit:位变量声明
例:sfr SCON = 0X98;
sfr16 T2 = 0xCC;
sbit OV = PSW^2; PSW^2表示PSW的第二位
C-51的包含的头文件
通常有:reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absacc.h
常用有:reg51.h reg52.h
(定义特殊功能寄存器和位寄存器);
math.h (定义常用数学运算);
单片机主要掌握以下几点
最小系统能够运行起来的必要条件。
1.电源 2.晶振3.复位电路
对单片机任意IO口的随意操作
1.输出控制电平高低2.输入检测电平高低。
定时器:重点掌握最常用的方式2
中断:外部中断、定时器中断、串口中断
串口通信:单片机之间、单片机与计算机间
方法:运用单片机就是控制单片机的IO口
在TX-1C型单片机实验板原理图中发光二极管是P2,图中由单片机的P1口控制
原理图中标号相同表示物理连接
发光二极管是由排阻组成,八个排阻,左边是高电平,让发光二极管亮阴极(右边)要给低电平,因为排阻上有关单向导通的发光二极管;发光二极管点亮是3mA,左边VCC是5伏,右边是低电平是0伏,点亮发光二极管的电压是1.7伏,所以电阻上的压降是5-1.7=3.3伏,
所以电阻的阻值是3.3V/3mA=1.1K
电阻分为上拉电阻、下拉电阻和限流电阻
去耦电容的一个作用是稳压,减缓电压的波动
74HC573是锁存器,锁存器的DIOLA管脚接单片机的26管脚;在TX-1C型单片机实验板原理图中一个锁存器控制发光二极管,另两个控制数码管
在课件74hc573中,见P1的真值表,OE是Out Enable输出使能,上面有横线的变量表示低电平有效,D表示输入端,Q表示输出端,当OE低电平时74hc573工作,真值表中L表示低,H表示高,X表示任意(或者高电平或者低电平),Z是数字电路中的高阻态(高阻态是介于高电平和低电平之间的状态,既不是高电平也不是低电平,和其它元器件连接,其它元器件输出高电平时高阻态跟着该元器件变成高电平,反之变成低电平),所以这里让锁存器74hc573工作,给锁存器U3的OE低电平,锁存器U3的输入端接单片机的P1口,由单片机的P1口来控制,10管脚是接地,20管脚接电源;LE表示锁存器的锁存端,见真值表,LE为高电平,输入端D是高电平输出是高电平,输入端D是低电平输出是低电平,LE为低电平,D无论什么值,输出 Q都是Q0,Q0是上一次输出端Q的值,这里给LE即DIOLA高电平;加锁存器是因为锁存器的输入端连接单片机的P1口,而P1口又连接AD0804(模数转换器)的输入端,如果不加锁存器控制发光二极管,当控制AD转换器时会导致发光二极管也亮
51单片机所有IO口上点后默认高电平
使用Keil软件:
打开Keil软件,点击菜单栏上面的Project下面的New Project建立工程,弹出对话框,先新建一个文件夹,再保存工程
然后点击菜单栏上面的File下面的New,新建一个文档,文档的后缀名是“.c”,再在左边面板的工程名下右键选择Add Files to Group ‘Source Group 1’,将该文档加入该工程中即可
编译时点击编译所有文件按钮
生成Hex文件 :点击全部编译按钮右边的Option for target按钮,Output栏下的Create HEX File选中打钩,再编译即可
Option for target按钮的Target下面可以调节晶振频率
STC_ISP软件的使用:先选中MCU Type,这里是STC89C52,再Open File打开Hex文件,再选择烧程序的Com口(计算机—>管理—>设备性能下面查询,还可以修改)(我的计算机上是右键我的电脑,选择属性,弹出系统属性对话框,选择硬件页,点击设备管理器,弹出设备管理器对话框,点击端口(COM和LPT)的十字符号,可以看见当前使用的串口号,前提是学习板的线已经插到串口上或USB口上),选择Max Buad波特率,然后点击Download下载程序开始,再按单片机上的启动按钮,必须先点击软件的下载然后再打开单片机
位操作点亮发光二极管:
#include<reg52.h>
sbit D1=P1^0;
void main()
{
D1=0;
}
总线操作点亮发光二极管:
#include<reg52.h>
void main()
{
P1=0xfd;
}
reg52.h文件定义了很多位寄存器,需要时也可以自己定义头文件,并加进到源文件中
练习:
3.点亮最后一个发光管:
#include<reg52.h>
void main()
{
P1=0x7f; //将单片机P1口的8个口由高到低分别赋值为01111111
}
4.点亮1、3、5、7
即10101010,AA
#include<reg52.h>
void main()
{
P1=0xaa;
}
5.点亮二、四、五、六
即10100011,c5
#include<reg52.h>
void main()
{
P1=0xc5;
}
6.尝试让第一个发光管闪烁
利用延时程序
#include<reg52.h>
void delay()
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
void main()
{
while(1)
{
P1=0xfe;
delay();
P1=0xff;
delay();
}
}
方法2:
#include<reg52.h> //52单片机头文件
sbit led1=P1^0; //单片机管脚位声明
void main() //主函数
{
unsigned int i; //定义一个int型变量
while(1)
{
i=50000; //变量赋初值为50000
led1=0; //点亮灯
while(i--); //延时
i=50000;
led1=1; //熄灭灯
while(i--);
}
}
7.尝试设计出流水灯程序
#include<reg52.h>
void delay()
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<200;j++);
}
void main()
{
while(1)
{
P1=0xfe;
delay();
P1=0xfd;
delay();
P1=0xfb;
delay();
P1=0xf7;
delay();
P1=0xef;
delay();
P1=0xdf;
delay();
P1=0xbf;
delay();
P1=0x7f;
delay();
}
}
方法2:
#include<reg52.h> //52单片机头文件
void main() //主函数
{
unsigned int i; //定义一个int型变量
while(1)
{
i=50000; //变量赋初值为50000
P1=0xfe; //点亮第一个灯
while(i--); //延时
i=50000; //变量赋初值为50000
P1=0xfd; //点亮第二个灯
while(i--); //延时
i=50000; //变量赋初值为50000
P1=0xfb; //点亮第三个灯
while(i--); //延时
i=50000; //变量赋初值为50000
P1=0xf7; //点亮第四个灯
while(i--); //延时
i=50000; //变量赋初值为50000
P1=0xef; //点亮第五个灯
while(i--); //延时
i=50000; //变量赋初值为50000
P1=0xdf; //点亮第六个灯
while(i--); //延时
i=50000; //变量赋初值为50000
P1=0xbf; //点亮第七个灯
while(i--); //延时
i=50000; //变量赋初值为50000
P1=0x7f; //点亮第八个灯
while(i--); //延时
}
}