🧑🏻‍💻 MCU - C51 单片机「实例」

首页 / 💰笔记 / 正文

前言

本文主要讲述 C51 单片机 学习需要掌握的基础内容纲领「实例代码地址

  • 订阅专栏,后续会陆续更新每章节内容

概览

  1. 控制小灯点亮、熄灭、闪烁、流水灯
  2. 数码管显示任意位任意(不大于 8 位)数据 display()
  3. 外部中断:控制小灯、数码管(带中断秒表或电子表、交通灯、计分器等)
  4. 定时器 / 计数器中断:控制数码管(电子表、正计时或倒计时秒表、交通信号倒计时等)
  5. 串口通信:双机通信发送和接收数据
  6. 液晶屏 1602 显示字符、时间:位置、方式、显示时间、时间可调

1. Hello Wriprin

在这里插入图片描述


2. 创建工程文件 (.c) .hex 调试


3. I/O 口控制小灯任意位置任意数量

// 点亮 熄灭  闪烁  流水灯
0 点亮  1 熄灭  delay(); // tms
P0^7 ...  P0^0=P0
P0=0xf0  P0=0x0f
// 数组法、循环左移右移函数
_crol_   _cror_

4. 数码管显示

// display(uchar one,.......);
// 显示任意数字,任意位置,任意位数
0xfe fd fb  f7  ef  df  bf 7f
display(1,2,3,4);

5. 外部中断 int0 int1

主程序:标志位设置  优先级  PX0  PX1   1   0
int0 int1 中断函数
中断名中断请求 (TCON 中断控制寄存器)中断控制(中断触发) (TCON 中断控制寄存器)中断允许 (IE 中断允许寄存器 )中断优先级 (IP 中断优先级 寄存器)
Int0IE0 = 1IT0=1 跳沿触发<br/> IT0=0 低电平触发EA = 1 总中断允许<br/> EX0 = 1 int0 中断允许PX0 = 1 高优先级<br/> PX0 = 0 低优先级
Int1IE1 = 1IT1 = 1 跳沿触发
IT1 = 0 低电平触发
EA = 1 总中断允许<br/> EX1 = 1 int1中断允许PX1 = 1 高优先级<br/> PX1 = 0 低优先级
T0TF0 = 1TR0 = 1 启动定时器 / 计数器<br/> TR0 = 0 启动定时器 / 计数器EA = 1 总中断允许<br/> ET0 = 1 T0 中断允许PT0 = 1 高优先级<br/> PT0 = 0 低优先级
T1TF1 = 1TR1 = 1 启动定时器 / 计数器<br/> TR1 = 0 启动定时器 / 计数器EA = 1 总中断允许<br/> ET1 = 1 T1 中断允许PT1 = 1 高优先级<br/> PT1 = 0 低优先级
串口TI = 1 发送请求<br/> RI = 1 接收请求(SCON 寄存器) EA = 1 总中断允许<br/> ES = 1 串口中断允许PS = 1 高优先级 <br/> PS = 0 低优先级

6. 定时器中断 t0 t1 + 数码管

// 电子表、秒表、交通数字倒计时
// 主程序:标志位设置  初值设置
// 中断计次函数:初值,20 次   1 次中断    1s   60   1min   60   1h  24
display(num / 10, num % 10);  num = 24   num = 1234
display(num / 1000, num / 100 % 10, num / 10 % 10, num % 10);

7. 外部中断 + 计数器中断 + 数码管

// 3 个中断标志位设置
// 计分器    加分 int0  减分 int1 清零 
// t0 计数器作为外部中断使用  65536-1  TMOD = 0x05

8. 串口中断

// 中断标志位设置,根据条件查表初值
// 发送程序  接收程序

// 串口通用接收程序
uchar receive()
{
    uchar dat;
    while(RI == 0);
    RI = 0;
    dat = SBUF;
    return dat;
}

//串口通用发送程序
void send(uchar dat)
{
    SBUF = dat;
    while(TI == 0);
    TI = 0;
}

9. 液晶屏 1602 显示

// 任意位置任意字符串任意显示方式  0c  0e   0f
0x80+y  0xc0+y
// 液晶显示时钟表
您阅读这篇文章共花了:
打赏
评论区
头像
文章目录