使用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. C/C++ 实现VA与FOA之间的转换

    PE结构中的地址互转,这次再来系统的复习一下关于PE结构中各种地址的转换方式,最终通过编程来实现自动解析计算,最后将这个功能集成到我的迷你解析器中,本章中使用的工具是上次讲解PE结构文章中制作的CMD ...

  2. hdu 1044 BFS(压缩图)+DFS

    题意:              给你起点,终点,图上有墙有路还有宝物,问你在规定时间内能否能到终点,如果能问最多能捡到多少宝物. 思路:           看完这个题目果断 BFS+三维的mark ...

  3. 进程保护原理Hook函数Openprocess

    Win32子系统:                                                                                            ...

  4. drozer源码学习:app

    源码下载:https://github.com/mwrlabs/drozer:模块的源码位于src.drozer.modules,根据模块名来划分文件夹: app.auxiliary.exploit. ...

  5. Qt链接MySQL发布后Drive not loadedDrive not loaded怎么办

    缺少动态链接库!把MySQL文件夹下面带dll.lib的全复制进去就行了

  6. 那些在GitHub能提高你的编程技能的项目

    1.免费的编程书籍 免费的开发手册 167K Repo:github.com/EbookFoundation/free-programming.. 2. 很棒的话题 包含了各种有趣的话题 148k R ...

  7. 理解微信小程序的双线程模型

    有过微信小程序开发经验的朋友应该都知道"双线程模型"这个概念,本文简单梳理一下双线程模型的一些科普知识,学识浅薄,若有错误欢迎指正. 我以前就职于「小程序·云开发」团队,在对外的一 ...

  8. ubuntu中执行可执行文件时报错“没有那个文件或目录”的解决办法(非权限问题)

    问题:可执行文件明明存在,也有可执行权限(x),但执行时就提示"没有那个文件或目录". 原因:这个程序的是32位的程序(比如arm-linux-gcc),而系统是64位的,运行时需 ...

  9. Django 请求和响应 request return

    request.method 请求方法 request.get  get请求信息 request.post  post请求信息 request.path 请求路径 方法: requset.get_fu ...

  10. 匿名函数lambda / map()方法

    lambda一般配合其他方法使用,一般使用在只用过一次就不用的函数,那就没必要特意去定义 lambda能支持的最复杂的语句就是三元运算 例如: lambda x,y: x*y if x < y ...