惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
V
Visual Studio Blog
宝玉的分享
宝玉的分享
IT之家
IT之家
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
I
InfoQ
B
Blog RSS Feed
T
Threatpost
博客园_首页
M
MIT News - Artificial intelligence
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Know Your Adversary
Know Your Adversary
U
Unit 42
Engineering at Meta
Engineering at Meta
C
Cyber Attacks, Cyber Crime and Cyber Security
月光博客
月光博客
Scott Helme
Scott Helme
T
Tor Project blog
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
S
Schneier on Security
Vercel News
Vercel News
博客园 - Franky
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
L
LangChain Blog
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
S
Security Affairs
A
About on SuperTechFans
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
大猫的无限游戏
大猫的无限游戏
W
WeLiveSecurity
Cisco Talos Blog
Cisco Talos Blog
罗磊的独立博客

Wriprin Blog

🐿️ SAP GUI 账户密码重置「Note」 🌳 Linux - tree 生成目录树「Note」 📒 SAP ABAP SY-REPID 变化「Note」 🗂️ SAP 通过 OData Service 反查 CDS View 位置 & 视图「Workaround」 🐌 Android Studio Gradle 无限 Build「假死」 🧑🏻‍💻 Android Studio 开发环境搭建 & 配置 🤖 Android Studio 默认配置路径修改 🐌 SAP ALV & 导出 Excel 负号前置「实例」 🍵 Java 调用 SAP RFC 接口「实例」
🧑🏻‍💻 MCU - C51 单片机「实例」
Wriprin · 2023-02-07 · via Wriprin Blog

前言

本文主要讲述 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
// 液晶显示时钟表

本文链接:https://blog.cnix.cc/index.php/archives/127/