使用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
嵌入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接口。
- 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//
}
}
- 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++);
}
}
}
- 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++);
}
}
- 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之间的数字。一次只能显示一个数字。
- 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++);
}
}
}
- 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单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...
- keil窗口显示不全_使用Keil语言的嵌入式C编程教程(下)
使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...
- C语言连接MySQL数据库编程教程:超详细
** C语言连接MySQL数据库编程教程 ** 一.下载安装mysql.h库文件 我们使用的编译器一般为VC6.0或者VS,默认的都是32位编译器,所以我们下载的库文件也直接下载32位的就可以.下面附 ...
- 人工智能开发语言 python,python人工智能编程教程
python适合做人工智能的编程语言吗? 当然,Python是人工智能的首选语言.具体原因如下:Python在设计上坚持了清晰的风格,让Python成为了一门简单.易读.易维护的语言,让大量用户所欢迎 ...
- C语言在嵌入式系统编程时的注意事项
C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...
- 《全面掌握Linux C语言嵌入式系统移植教程》学习笔记(Liunx速查简明)
全面掌握Linux C语言嵌入式系统移植教程学习笔记(Liunx速查简明) 笔记前言: P3: shell命令简明 P4: vi /vim编辑器入门 P5:vi /vim编辑器扩展 P8: gcc编译 ...
- 嵌入式SQL编程快速上手教程
嵌入式SQL编程快速上手教程 声明:我这里标题虽是<嵌入式SQL编程快速上手教程>,但只是嵌入式SQL编程的冰山一角罢了,我会通过举一道简单例题来教小白快速上手嵌入式SQL编程 第一:题目 ...
- 用C语言实现高效嵌入式系统编程
1引言 随着市场竞争的日趋激烈,要求电子工程师能够在短时间内编写出执行效率高而又可靠的嵌入式系统的执行代码.同时,由于实际系统的日趋复杂,要求所写的代码规范.模块化并便于多个工程师以软件工程的 ...
- C语言嵌入式系统编程修炼之道——性能优化篇
C语言嵌入式系统编程修炼之道--性能优化篇 作者:宋宝华 e-mail:[email]21cnbao@21cn.com[/email] 1.使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌 ...
最新文章
- Shell中判断字符串是否为数字的6种方法分享
- 3.3.2 差错控制(检错编码)
- SQL注入思维导图【新手全面非详细】
- activex 控件的id 定义位置+使用ocx控件的客户端程序中对控件定义的文件中控件id定义的位置...
- MapReduce 中的两表 join 几种方案简介
- 作者:王小兵,男,农业部市场与经济信息司副司长。
- 1015 水仙花数(枚举)
- 基于jQ+CSS3页面滚动内容元素动画特效
- 2018-2019-1 20189205 《Linux 内核原理与分析》第三周作业
- Hutool 工具类
- 商汤发布L4级接驳小巴和智能路侧感知解决方案,加速V2X产业创新
- 基于Spring MVC的Excel文件上传
- html中设置锚点定位的几种常见方法
- 纹理——灰度共生矩阵公式及代码
- 用数字ic产生正弦波的仿真尝试。
- 位图图片转换矢量图的工具:Vector Magic for mac
- STM32F103—有关SIM900A模块的使用
- text 热敏打印机_便携热敏打印机API参考手册.pdf
- mysql 获取当天0点 和 当天23点59分59秒
- Ubuntu18.04 安装360 WIFI驱动
热门文章
- 2022-2028年中国羽绒工业投资分析及前景预测报告
- TensorRT 7.2.1 开发概要(下)
- 科技公司重新关注2级以上驾驶员辅助
- 图像超分辨率算法:CVPR2020
- 大数据调度平台Airflow(五):Airflow使用
- 2021年大数据HBase(六):HBase的高可用!【建议收藏】
- 2021年大数据Flink(四十五):​​​​​​扩展阅读 双流Join
- Redis高可用集群Redis Cluster搭建
- C++ multimap 的使用
- Resource entery xx is already defined