使用Keil语言的嵌入式C编程教程(上)
使用Keil语言的嵌入式C编程教程(上)
Embedded C Programming Tutorial with Keil Language
Embedded System
嵌入式系统是指以单片机为核心的嵌入式C编程软硬件的结合,旨在完成特定的任务。这些类型的嵌入式系统正在我们的日常生活中使用,如洗衣机、录像机、冰箱等。嵌入式系统首先由8051单片机介绍。

8051单片机简介
8051微控制器是一个基本的微控制器,它是由英特尔公司自1970年首次推出。它是由8086处理器体系结构开发的。8051是一个微控制器家族,由飞利浦、阿特梅尔、戴尔等不同厂商开发。8051微控制器已经应用于从儿童玩具到大型汽车系统的许多嵌入式产品中。

8051微控制器是8位“CISC”结构。它由存储器、串行通信、中断、输入/输出端口和定时器/计数器组成,内置于一个集成芯片中,通过编程控制与之接口的外围设备。程序存储在微控制器的RAM中,但在编写程序之前,必须了解微控制器的RAM结构。
嵌入式系统编程:基础声明
每个函数都是执行特定任务的语句的集合,一个或多个函数的集合称为编程语言。每一种语言都包含一些基本要素和语法规则。C语言程序设计是用字符集、变量、数据类型、常量、关键字、表达式等来编写C语言程序。所有这些都在头文件或库文件下考虑,表示为include<studio.h>

C语言的扩展称为嵌入式C语言。与以上相比,C语言的嵌入式编程具有一些额外的特性,如数据类型和关键字,头文件或库文件表示为
#include<microcontroller name. h>
嵌入C附加关键字
· sbit
· bit
· SFR
· volatile
· macros define
“sbit”用于声明微控制器的单个管脚。例如,LED连接到P0.1管脚,不建议直接将值发送到端口管脚,首先,我们必须用另一个变量声明管脚,然后才能在程序中的任何地方使用。 语法:sbit a=P0^1;//用变量声明相应的pin//
a=0x01;//将值发送到端口pin//
“bit”用于检查变量的状态。
语法:bit c;//声明位变量//
c=a;//c变量赋值//
if(c==1)//检查条件true或false//
{
…..
……
}
“SFR”关键字用于通过另一个名称访问SFR寄存器。SFR寄存器定义为一个特殊的功能寄存器,它通过指示地址来包含所有与外围设备相关的寄存器。SFR寄存器由SFR关键字声明。SFR关键字必须是大写字母。
语法:SFR
port=0x00;//0x00是端口0地址,由端口变量声明//
Port=0x01;//然后将值发送到端口0//
delay();
port=0x00;
delay();
“volatile”关键字是嵌入式系统开发中最重要的关键字。无法意外更改用volatile关键字值声明的变量。它可以用于内存映射的外围寄存器,由ISRs修改的全局变量。如果不使用volatile关键字来发送和接收数据,则会发生代码错误或优化错误。
语法:volatile
int k;
宏是用于将语句块声明为预处理器指令的名称。无论何时使用该名称,它都将被宏的内容替换。宏表示定义。整个端口管脚由宏定义。
语法:#define
dat Po;//整个端口由一个变量声明//
dat=0x01;//发送到端口0的数据//
基本嵌入式C程序
每种操作系统的微控制器编程都不同。尽管已经存在很多操作系统,如Linux、Windows、RTOS等。然而,实时操作系统在嵌入式系统开发中有许多优点。本文讨论了用8051单片机开发嵌入式C程序的基本方法。

用8051单片机实现LED闪烁
用8051单片机在七段显示器上显示数字
用8051单片机进行定时器/计数器的计算与编程
基于8051单片机的串行通信计算与编程
用8051单片机中断程序
用8051单片机进行键盘编程
用8051单片机进行液晶显示编程
用8051单片机实现LED闪烁
LED是一种半导体器件,应用广泛,主要用于显示。在测试过程中发现了大量的应用作为指标来检验不同阶段测试结果的有效性。它们非常便宜,而且很容易买到各种形状、颜色和尺寸。LED用于设计信息显示板和交通控制信号灯等。这里的LED与8051微控制器的端口0接口。

1.
01010101
10101010
#include<reg51.h> //header file//
void main() //the program execution stat point//
{
unsigned int i; //data type//
while(1) //for continuous loop//
{
P0=0x55; //send the hexa value to the port0//
for(i=0;i<30000;i++) //normal delay//
P0=0x3AA; //send the hexa value to the port0//
for(i=0;i<30000;i++) //normal delay//
}
}
2. 00000001
00000010
00000100
.
.
10000000
#include<reg51.h>
void main()
{
unsignedint i;
unsigned char j,b;
while(1)
{
P0=0x01;
b=P0;
for(j-0;j<3000;j++);
for(j=0;j<8;j++)
{
b=b<<1;
P0=b;
for(j-0;j<3000;j++);
}
}
}
3. 00001111
11110000
#include<reg51.h>
void main()
{
unsignedint i;
while(1)
{
P0=0x0F;
for(j-0;j<3000;j++);
P0=0xF0;
for(j-0;j<3000;j++);
}
}
4. 00000001
00000011
00000111
.
.
11111111
#include<reg51.h>
void main()
{
unsignedint i;
unsigned char j,b;
while(1)
{
P0=0x01;
b=P0;
for(j-0;j<3000;j++);
for(j=0;j<8;j++)
{
b=b<<1;
b=b|0x01;
P0=b;
for(j-0;j<3000;j++);
}
}
}
用8051单片机在七段显示器上显示数字
七段式显示器是最基本的电子显示器,在许多系统中用来显示数字信息。它由八个发光二极管组成,当发光二极管的适当组合打开时,这些发光二极管按顺序连接,以便显示0到9之间的数字。一次只能显示一个数字。

1. WAP to display the numbers form ‘0 to F’ on four 7segment
displays ?
#include<reg51.h>
sbit a= P3^0;
sbit b= P3^1;
sbit c= P3^2;
sbit d= P3^3;
void main()
{
unsignedchar n[10]={0×40,0xF9,0×24,0×30,0×19,0×12,0×02,0xF8,0xE00,0×10};
unsigned inti,j;
a=b=c=d=1;
while(1)
{
for(i=0;i<10;i++)
{
P2=n[i];
for(j=0;j<60000;j++);
}
}
}
2. WAP to display the numbers from ’00 to 10’ on 7segment
displays ?
#include<reg51.h>
sbit a= P3^0;
sbit b= P3^1;
void display1();
void display2();
void delay();
void main()
{
unsignedchar n[10]={0×40,0xF9,0×24,0×30,0×19,0×12,0×02,0xF8,0xE00,0×10};
unsigned inti,j;
ds1=ds2=0;
while(1)
{
for(i=0,i<20;i++)
display1();
display2();
}
}
void display1()
{
a=1;
b=0;
P2=s[ds1];
delay();
a=1;
b=0;
P2=s[ds1];
delay();
}
void display2()
{
ds1++;
if(ds1>=10)
{
ds1=0;
ds2++;
if(ds2>=10)
{
ds1=ds2=0;
}
}
}
void delay()
{
unsignedint k;
for(k=0;k<30000;k++);
}
使用Keil语言的嵌入式C编程教程(上)的更多相关文章
- 使用Keil语言的嵌入式C编程教程(下)
使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...
- 第九章 C语言在嵌入式中的应用
上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...
- 在嵌入式开发中应该这样理解嵌入式C编程
一.新手常常问的一个问题:C语言和嵌入式C编程有什么区别?而嵌入式工程师一般都会告诉你,其区别在于嵌入式的C语言是跑在嵌入式的开发板上的,CPU和电脑不一样,所以编译器也是不一样的,生成的可执行程序也 ...
- C语言嵌入式系统编程修炼之四:屏幕操作
汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功 ...
- C语言嵌入式系统编程修炼之二:软件架构篇
模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...
- C语言嵌入式系统编程修炼之一:背景篇
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...
- C语言嵌入式系统编程修炼
C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...
- [读书笔记2]《C语言嵌入式系统编程修炼》
第3章 屏幕操作 3.1 汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示&qu ...
- [读书笔记1]《C语言嵌入式系统编程修炼》
大学前两年一直搞的是单片机,写的是嵌入式C语言程序,走过了不少弯路,现在感觉仍然在走弯路.有幸偶尔看到了这篇文章,深感自己以前写程序的时候存在很多误区.现写篇博客做下总结. 作者:宋宝华出处:天极 ...
随机推荐
- UVA11729突击战(汇报和执行任务)
题意: 你是一个长官,有一些士兵要跟你先汇报任务后在去执行任务,每次只能接受一个人的汇报,但是每一时刻可以有多个士兵在执行任务,问所有任务执行完要的最小时间. 思路: 按执行 ...
- Linux启动流程和服务管理(init和systemd)
目录 一:Linux启动流程 init和Systemd的区别 二:Linux服务管理(service,systemctl) 一:Linux启动流程 Rhel6启动过程: Rhel7启动过程: GRUB ...
- 渗透测试神器Cobalt Strike的使用
目录 Cobalt Strike Cobalt Strike的安装 Cobalt Strike的使用 创建监听器:
- 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素
[python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...
- Docker配置阿里云镜像加速器及开启远程连接
适用于CentOS-7版本 mkdir /etc/docker vim /etc/docker/deamon.json 添加以下内容配置镜像 { "registry-mirrors" ...
- 轻量级工具Vite到底牛在哪——一文全知道
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/vitejs-front-end-build- ...
- Mybatis学习之自定义持久层框架(一) 为什么要用框架而不直接用JDBC?
前言 说起Mybatis,相信大家都不会感到陌生,它是一款优秀的持久层框架,应用于java后端开发中,为客户端程序提供访问数据库的接口. 我们都知道,JDBC是Java语言中用来规范客户端程序如何来访 ...
- Nifi:初识nifi
写在前面: 第一次接触这一系统的时候,只有github上的一坨源码和官方的英文文档,用起来只能说是一步一个坑,一踩一个脚印,现在回想那段血泪史,只想 ***,现在用起来算是有了一些经验和总结,这里就做 ...
- 简单聊聊内存逃逸 | 剑指offer - golang
问题 简单讲讲golang的内存逃逸吗? 解析 什么是内存逃逸 在程序中,每个函数块都会有自己的内存区域用来存自己的局部变量(内存占用少).返回地址.返回值之类的数据,这一块内存区域有特定的结构和寻址 ...
- Nifi:nifi内置处理器Processor的开发
本篇主要是介绍自定义处理器的开发方式及Nifi处理器开发的一些细节 Nifi-Processor自定义开发的流程 之前说过,大部分的数据处理,我们可以基于ExcuseGroovyScript处理器,编 ...