使用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编程教程(上)的更多相关文章

  1. 使用Keil语言的嵌入式C编程教程(下)

    使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...

  2. 第九章 C语言在嵌入式中的应用

    上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...

  3. 在嵌入式开发中应该这样理解嵌入式C编程

    一.新手常常问的一个问题:C语言和嵌入式C编程有什么区别?而嵌入式工程师一般都会告诉你,其区别在于嵌入式的C语言是跑在嵌入式的开发板上的,CPU和电脑不一样,所以编译器也是不一样的,生成的可执行程序也 ...

  4. C语言嵌入式系统编程修炼之四:屏幕操作

    汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功 ...

  5. C语言嵌入式系统编程修炼之二:软件架构篇

    模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...

  6. C语言嵌入式系统编程修炼之一:背景篇

    不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...

  7. C语言嵌入式系统编程修炼

    C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...

  8. [读书笔记2]《C语言嵌入式系统编程修炼》

    第3章 屏幕操作   3.1 汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示&qu ...

  9. [读书笔记1]《C语言嵌入式系统编程修炼》

      大学前两年一直搞的是单片机,写的是嵌入式C语言程序,走过了不少弯路,现在感觉仍然在走弯路.有幸偶尔看到了这篇文章,深感自己以前写程序的时候存在很多误区.现写篇博客做下总结. 作者:宋宝华出处:天极 ...

随机推荐

  1. 【并发编程】Java中的锁有哪些?

    0.死锁 两个或者两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们都将无法让程序进行下去: 死锁条件: 不可剥夺条件: T1持有的资源无法被T2剥夺 请 ...

  2. Ubuntu20安装Truffle框架并部署第一个DApp

    1.查看Ubuntu版本信息 $ screenfetch 2.安装node ①查看nodejs官网稳定版(LTS)版本号(下面的14就是此时的版本号) ②添加源 $ curl -sL https:// ...

  3. WPF小经验

    Binding.IsAsync当属性值填充好后,与该属性绑定的界面才会开始加载(属性绑定优于控件加载) private IList<string> _list; public IList& ...

  4. C++ 三消游戏基本实现

    最近在研究三消算法,我想试试在完全不借助网络资源的情况下搞定这个东西,所以有些地方可能不是最优的. 代码留此备忘. 1. 3x_desk_event.h 1 #pragma once 2 3 #ifn ...

  5. PHP基础-PHP中的函数声明

    /* PHP的变量的范围* 局部变量: 在函数中声明的变量就是局部变量,只能在自己的函数内部使用.* 全局变量: 在函数外声明,在变量声明以后的,直到整个脚本结束前都可以使用,包括在函数中和{}中都可 ...

  6. 微服务架构开发电商系统需要用Redis、ES和MQ吗?

    如果不用什么很高大上的东西,就是有多个微服务就行这种技术架构会很难吗? 我看了一些视频,他们都用到了es.mq.redis的东西,我想不用这些东西,就简单的有多个服务,这样可行吗? 01 使用微服务你 ...

  7. C#如何加载嵌入到资源的非托管dll

    如何加载非托管Dll 我们总会遇到需要加载非Win32的非托管dll,这里推荐一种方式就是将那些非win32的非托管dll嵌入资源的方式,在入口解压并且加载的方式,我先来看看如何实现吧,首先我们准备好 ...

  8. 【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)

    Microsoft Graph 是 Microsoft 365 中通往数据和智能的网关. 它提供统一的可编程模型,可用于访问 Microsoft 365.Windows 10 和企业移动性 + 安全性 ...

  9. 人人都爱Kubernetes,Docker难道就不香了吗?

    开篇 提起Docker,有很多人第一印象会认为它就是一个虚拟化容器,所以大家特别容易陷入到一种误区,就是觉得Docker只是在Linux操作系统之上又增加了一层,就跟OS上跑了一个VMWare一样.D ...

  10. 论文翻译:Conv-TasNet: Surpassing Ideal Time–Frequency Magnitude Masking for Speech Separation

    我醉了呀,当我花一天翻译完后,发现已经网上已经有现成的了,而且翻译的比我好,哎,造孽呀,但是他写的是论文笔记,而我是纯翻译,能给读者更多的思想和理解空间,并且还有参考文献,也不错哈,反正翻译是写给自己 ...