一、LED灯

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

LED

 

二、编写程序

1、右键点击User栏添加用户主程序(main.c)

2、右键引用51头文件

3、编写程序主体框架

4、按照原理图编写程序

程序思路:

方法一:对P1整体进行赋值,控制所有的LED灯——对整体赋值的时候是P1=0x??,而不是对P1赋值0和1,因为P1是八个LED灯,一共有^{_2{8}}种状态,如果赋值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

物联沃分享整理
物联沃-IOTWORD物联网 » 单片机简要总结

发表回复