单片机简要总结
一、LED灯
一、前期准备:新建工程,一个工程一个文件夹;芯片选择;新建源文件,点击“Target”生成Hex文件或者更多;查看单片机中LED对应的引脚在哪里,以及确定与单片机是共阴极还是共阳极连接,这决定了我们应该输入高?低电平使它被点亮。下面截图以AT89C52为例子


二、编写程序
1、右键点击User栏添加用户主程序(main.c)
2、右键引用51头文件
3、编写程序主体框架
4、按照原理图编写程序
程序思路:
方法一:对P1整体进行赋值,控制所有的LED灯——对整体赋值的时候是P1=0x??,而不是对P1赋值0和1,因为P1是八个LED灯,一共有种状态,如果赋值0和1,显然结果就不对了,而且计算机会认为你的八位里面只有第一位进行了编辑,后面的没操作就都是0,所以P1=0/1 0000000,仿真结果就是第一个灯闪烁,后面的灯常亮。
对LED灯整体赋值01的效果
方法二:对P1中八个IO口单独赋值,控制单个LED灯,这样就可以点亮任意灯了。
三、烧录程序
1、在Keil内编译生成HEX文件
2、打开STC-ISP烧录工具,用数据线将单片机连接到电脑上
3、导入HEX文件,点击下载/编程
4、单片机冷重启
四、进阶点灯
1. LED灯闪烁
实现原理:通过不断给P1端口赋高低电平,实现LED灯的开与关,从而达到闪烁的目的。
延时函数定义:在单片机代码中,每次执行一条代码是很快的,也就几微秒左右,那有时候我们想让某一条代码执行后等待一阵子,再去执行下一条,这时候就需要用到延时函数。
延时函数生成:
1.1打开STC-ISP烧录工具
1.2打开软件延时计算器
1.3系统频率选择12MHz 定时长度选择500毫秒 指令集选择STC-Y1
1.4.生成C代码,粘贴至工程文件中,并删除nop语句
2.LED流水灯
实现原理:通过不断给P1中不同的IO口置低电平,从而达到LED流水灯的效果
程序思路:
方法一:通过给P1口赋不同的值从而达到流水灯的效果
方法二:通过内置函数库实现流水灯效果
_crol_:循环左移 _cror_:循环右移 所属库:intrins.h
3.自定义延时函数(自定义延时1ms,在Windows系统中)
#include <stdio.h>
#include <Windows.h> // 引入Windows相关的头文件
// 定义1毫秒延时函数
void delay_1ms() {
LARGE_INTEGER freq, start, end;
// 获取高精度计数器的频率
QueryPerformanceFrequency(&freq);
// 获取开始时间
QueryPerformanceCounter(&start);
do {
QueryPerformanceCounter(&end);
} while ((end.QuadPart - start.QuadPart) < (freq.QuadPart / 1000));
}
int main() {
int custom_delay_ms = 5000; // 自定义延时5000毫秒,可根据需求修改
int i;
// 通过while循环调用延时函数来实现自定义延时
while (custom_delay_ms > 0) {
delay_1ms();
custom_delay_ms -= 1;
}
printf("延时结束\n");
return 0;
}
——延时函数主要利用while ,do-while语句,以1ms为基本单位,让1ms循环x次就可以达到自定义延时函数了。
二、按键(矩阵按键)
一、前期准备:查看按键的原理图,看与单片机哪个引脚相接,以及查看按键另一端连接电源还是接地,这决定输入高?低?电平读取。
二、模块化函数编写
模块化好处:
1、便于程序移植
2、便于理解思路
3、便于局内调用
三、编写程序
1.记住几行代码:读取Val、上升沿Up、下降研Down、辅助扫描Old
2.矩阵键盘
——思路:先选行后选列
三、数码管
1.
结束语:(一点总结,若有错误,望指正,谢谢。&&&持续更新)
作者:Feynman’s boom