点亮第一个led灯
-
新建工程
-
选择固件
-
新建代码源文件
-
添加如下代码
1
2
3
4
5
6
7
8
sbit LED = P1^1;
void main()
{
LED = 0; //点亮LED2
} -
编译前要先配置,让编译器在编译完成后输出hex文件,hex文件用来烧录进单片机里面
-
编译
-
上传(烧录)
到此第一个点灯小程序结束
流水灯
按照之前的步骤再建立一个新工程,写下如下代码:
1 |
|
说明:
intrins.h
头文件包含移位函数 :右移_cror_()
、左移_corl_()
蜂鸣器
蜂鸣器分有源与无源蜂鸣器
- 有源指内部自带震荡源,只要提供电压即可响,但由于其震荡源震动频率固定,因此只能产生一种频率的声音
- 无源蜂鸣器指内部没有震荡源,需要提供变化的电压(方波)才能让其响
一个蜂鸣器的简单驱动电路:
1 |
|
数码管
原理
单个数码管结构原理:
多个数码管:
说明:
74HC573是个锁存器,原理如下:
当控制端LE为高电平时,输出端Q的数据随输入端D的数据变化而变化
当控制端LE为低电平时,输入端D的数据变化,Q端会保持之前的状态
在这幅图
用到2片74HC573模块,上面一片是用来控制哪一个数码管使用,下面那一片用来控制显示的字符
在这8个数码管中,左边是低位,右边是高位,这是共阴极数码管,比如位选输入“0xFE”(即1111 1110
),最左边这个数码管就被选中了。
数码管的每一段都接到地,给对应的段提供高电平就能点亮它,其数码表如下
1 | 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F |
数码管静态显示
1 |
|
数码管动态显示
要让多个数码管同时显示,如果用静态显示的方式,每个数码管都要8根线连接,n个数码管就要 n*8根线,比较耗费资源,因此使用动态扫描的方式进行显示,即快速扫描每一个数码管,分别让它们进行显示,只要足够快,由于视觉暂留效应,人的大脑会以为这是同时显示,实际上每个时刻只有一个数码管进行了显示
这个代码用来控制3个数码管来显示一个三位数
1 |
|
键盘
非编码键盘分为独立键盘和矩阵键盘
独立键盘
对于独立键盘而言,例如,当S2按键按下时,P30被拉低,变为低电平,因此要判断S2是否被按下,只需要不断检测
P30是否为低电平即可
【注意】
- 按键消抖,最简单的是延时10~20ms后再检查其状态是否变化
- 松手检测
1 | /********************************************************************************* |
矩阵键盘
判断矩阵按键中某个按键是否按下可采用先列扫描再行扫描的方式
- 列扫描:先给P37, P36, P35, P34高电平,同时给P33,P32,P31,P30低电平,即传送 “0xF0”(11110000)过去,如果【S6】(或S10/S14/S18)按下,则P34就会被拉低,P3的引脚数据变为“0xE0”(1110 0000),S7按下,P35被拉低,变为“0xD1”(1101 0000),因此只要判断P3这一变量的数据变化即可判断是哪一列被按下了;
- 行扫描:给P3发送“0x0F”(0000 1111),如果是【S6】按下,则P30被拉低,P3数据变为“0x0E”(0000 1110),如果是【S10】按下,P3数据变为“0x0D”(0000 1101),这样就可以判断出是哪个按键按下。
1 | /********************************************************************************* |
总结:先列扫描,再行扫描;或者先行扫描,再列扫描