登录/注册

单片机c语言教程

更多

单片机C语言教程(8051为例)

一、开发环境搭建

  1. 所需工具

    • 编译器:Keil μVision(商业版)或 SDCC(开源)
    • 烧录软件:STC-ISP(STC单片机)、PZ-ISP等
    • 硬件:开发板(如STC89C52)、USB转串口模块
  2. Keil基本操作

    • 新建工程:Project → New μVision Project
    • 选择单片机型号(如STC89C52)
    • 添加C文件:File → New → 保存为 .c 文件
    • 生成HEX文件:勾选 Options for Target → Output → Create HEX File

二、单片机C语言基础

特殊关键字(扩展标准C语言):

#include <reg52.h>  // 包含寄存器定义头文件

sbit LED = P1^0;    // 定义P1口的第0位为LED
bit flag = 0;        // 定义1位二进制变量

最小程序框架

#include <reg52.h>

void main() {        // 单片机入口函数
    while(1) {       // 无限循环(单片机持续运行)
        // 主程序代码
    }
}

三、GPIO控制(点亮LED)

#include <reg52.h>

sbit LED = P1^0;  // 假设LED连接P1.0口(低电平点亮)

void main() {
    while(1) {
        LED = 0;  // 输出低电平,点亮LED
        // LED = 1; // 熄灭LED
    }
}

四、精准延时函数

1. 简单延时(不精确)

void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for(i=0; i<ms; i++)
        for(j=0; j<114; j++);  // 12MHz晶振的近似值
}

2. 定时器延时(推荐)

void Timer0_Init() {
    TMOD |= 0x01;   // 定时器0模式1(16位)
    TH0 = 0xFC;     // 1ms延时初值(12MHz晶振)
    TL0 = 0x67;
    TR0 = 1;        // 启动定时器
}

void delay_ms(unsigned int ms) {
    while(ms--) {
        while(!TF0);  // 等待溢出
        TF0 = 0;
        TH0 = 0xFC; TL0 = 0x67;  // 重装初值
    }
}

五、按键输入检测

sbit KEY = P3^2;  // 按键连接P3.2(低电平表示按下)

void main() {
    LED = 1;  // 初始化LED熄灭
    while(1) {
        if(KEY == 0) {       // 检测按键按下
            delay_ms(10);    // 消抖
            if(KEY == 0) {
                LED = ~LED;  // 翻转LED状态
                while(!KEY); // 等待松开
            }
        }
    }
}

六、定时器中断(闪烁LED)

#include <reg52.h>

sbit LED = P1^0;
unsigned int count = 0;

void Timer0_Init() {
    TMOD = 0x01;      // 定时器0模式1
    TH0 = 0x3C;       // 50ms定时(12MHz)
    TL0 = 0xB0;
    EA = 1;           // 开总中断
    ET0 = 1;          // 开定时器0中断
    TR0 = 1;          // 启动定时器
}

void main() {
    Timer0_Init();
    while(1);        // 主循环空转,等待中断
}

void Timer0_ISR() interrupt 1 {
    TH0 = 0x3C;     // 重装初值
    TL0 = 0xB0;
    if(++count == 10) { // 0.5秒(50ms×10)
        count = 0;
        LED = ~LED;    // 翻转LED
    }
}

七、串口通信(UART)

void UART_Init() {
    SCON = 0x50;    // 模式1(8位UART),允许接收
    TMOD |= 0x20;   // 定时器1模式2(自动重载)
    TH1 = 0xFD;     // 波特率9600(12MHz晶振)
    TL1 = 0xFD;
    TR1 = 1;        // 启动定时器1
    EA = 1;         // 开总中断
    ES = 1;         // 开串口中断
}

void UART_SendByte(unsigned char dat) {
    SBUF = dat;
    while(!TI);     // 等待发送完成
    TI = 0;
}

void UART_ISR() interrupt 4 {
    if(RI) {
        RI = 0;
        unsigned char recv = SBUF;
        UART_SendByte(recv + 1);  // 回发数据+1
    }
}

八、进阶知识

  1. 外设驱动

    • LCD1602显示
    • DS18B20温度传感器
    • ADC模数转换
  2. 常用设计模式

    // 状态机示例(LED三模式切换)
    enum {OFF, BLINK, ON} state = OFF;
    
    void main() {
       while(1) {
           switch(state) {
               case OFF: LED=1; break;
               case BLINK: LED=~LED; delay_ms(200); break;
               case ON: LED=0; break;
           }
           if(KEY==0) state = (state+1)%3;  // 按键切换状态
       }
    }
  3. 优化技巧

    • 使用 code 关键字将常量存入ROM(如unsigned char code table[] = {0x3F,0x06...};
    • 位操作替代乘除(如 P1 |= 0x01; 代替 P1 = P1 | 0x01;

提示:不同单片机(STM32、PIC、AVR)外设操作差异较大,但C语言核心语法通用。学习时重点关注:

  1. 数据手册中的寄存器配置
  2. 时钟系统和外设原理
  3. 中断向量表设计

建议从51单片机入门,再过渡到ARM Cortex-M系列(如STM32)。

51单片机汇编语言教

51单片机汇编语言教程(全28讲),十分全面以及详细介绍

2023-09-27 07:56:50

51单片机汇编语言教

51单片机汇编语言教程(25讲),十分详细的介绍

2023-09-25 07:49:01

手把手教你学PIC单片机C语言

手把手教你学PIC单片机C语言教程第1课- PICHL-K18- PICHL-K18慧净电子--做人人都买得起的PPIICC

2021-07-15 09:23:44

《PIC单片机C语言》pdf

《PIC单片机C语言》pdf

资料下载 ah此生不换 2021-11-29 16:54:18

郭天祥 新概念51单片机C语言教程光盘下载地址

下载地址:郭天祥 新概念51单片机C语言教程光盘下载地址

资料下载 微风挽雨 2021-11-13 19:36:06

新概念51单片机C语言教程的课后习题资料合集

本文档的主要内容详细介绍的是新概念51单片机C语言教程的课后习题资料合集免费下载。

资料下载 你还好吗ll 2020-10-22 08:00:00

51单片机汇编语言教程之单片机条件转移指令的详细资料说明

本文档的主要内容详细介绍的是51单片机汇编语言教程之单片机条件转移指令的详细资料说明。

资料下载 佚名 2019-06-04 16:25:09

51单片机汇编语言教程之单片机逻辑与或异或指令的详细资料讲解

本文档的主要内容详细介绍的是51单片机汇编语言教程之单片机逻辑与或异或指令的详细资料讲解。

资料下载 佚名 2019-05-31 16:59:12

单片机c语言应用程序设计

单片机C语言期末考试题..,单片机的

2021-07-15 08:51:48

单片机c语言入门

单片机c语言入门单片机

2021-07-15 08:10:39

分享一份c51单片机c语言教

c51单片机c语言教程

2021-07-15 06:43:22

新概念51单片机C语言教程纠错(1)相关资料分享

寒假突发奇想学了一下51单片机,以前一直在用32系列,这一次用的是郭天祥新概念51单片C

2021-07-01 06:43:04

单片机C语言C语言为什么有差异?

许多小伙伴在学完C语言后想入门单片机,但学着学着发现明明都是C

2020-09-01 16:39:01

请问学单片机是否需要先学C语言

网友:学单片机是否需要先学C语言?是否需要先买C

2019-09-19 04:35:51

51单片机c语言教程全集

的微软 VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。本站提供的单片机c语言教程都是基于keilc51的。

2019-07-13 15:53:54
7天热门专题 换一换
相关标签