单片机编程步骤

单片机编程步骤,第1张

单片机如何编程?非常详细的Keil工程建立全过程讲解

从零学电子

03-07

在单片机的开发或使用过程中除了掌握必要的硬件外,同样离不开软件,只有通过软件(程序)的执行,硬件才能发挥出具体的作用。机器如何认识我们用各种符号编写的程序呢?早期我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,随着单片机开发技术的不断发展,从使用汇编语言逐渐过渡到使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最为流行的开发MCS-51系列单片机软件。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。Keil软件对计算机的硬件资源要求很低,可以说现在市面上的计算机都能满足其硬件需求。

Keil C51

Keil C51是51系列兼容单片机C语言软件开发系统,采用全Windows界面,提供了丰富的库函数和功能强大的集成开发调试工具。生成的目标代码效率非常之高,且生成的汇编代码紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。相信用过汇编语言后再使用C来开发,体会更加深刻,当然如果汇编语言和硬件结构熟练到一定程度,使用汇编语言会更具优势,但对于大部分初学者而言,Keil C51应该是首选。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

Keil uVison4是普通版本,只能适用于单片机,主要是基于8051系列单片机的开发环境;Keil MDK是扩展版本,包含了部分ARM。为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境;初学者建议采用Keil uVison4及更低版本,注意:Keil uVison4分Keil MDK-ARM和Keil C51版本,初学者应安装Keil C51版的。

关于Keil软件的安装与常用其它软件安装的方法类似,安装按照说明一步一步 *** 作即可,不再赘述。本文主要详细讲解用Keil uVison4新建一个工程的详细过程,相信通过这个教程的学习,您一定会对使用Keil软件创建一个新的工程有深入的掌握。

第一步:从桌面找到Keil图标,双击图标启动Keil软件,

启动Keil

会看到如图所示界面。

启动后的界面

第二步:点击菜单条中的"Project"并从下拉菜单中选择"New uVision Project…",

新建工程

自动d出一个项目路径选择对话框,(若打开keil软件时,如果发现此软件默认打开了一个之前已经存在的工程,请先关闭此工程。点击上面"Project"选项,在d出的下拉菜单中选择"Close Project"即可。)

选择路径新建文件

在d出的对话框中,选择即将创建工程的保存路径和文件夹,若不存在可以用与Window系统一致的方法新建文件夹,如"TEST",并在该文件夹下的对话框文件名处输入自己为工程起的工程名,如下图输入的LCD1602。

输入工程名

第三步:输入文件名点击保存后,d出如图所示控制器选择对话框,

选择单片机类型

在单片机类型列表中找到并选中"Atmel"下的AT89C52(大家根据自己控制器型号选择),右侧区域给出所选单片机的硬件资源,

单片机的硬件资源说明

点击"OK",d出询问是否将标准51系列启动代码添加到新建工程中的d窗,因为keil的库文件里面已经有一个默认的启动代码了,如果你的工程里没有启动代码,keil就会使用库里的默认启动代码,如果有,keil就会编译并使用你的启动代码,库里的启动代码会被忽略。(初学者建议点击"否即可")

选择是否添加启动代码到工程中

第四步:点击"File"菜单下的"New",新建会看到出来一个名字为"Text1"的文件,

新建C文件

再一次点击上面"File"下拉菜单中 "Save"或点击工具栏中的"保存",会d出一个保存的对话框,输入文件名如"LCD1602MAINC"(切记,此处无论你起什么样的文件名,但后面必须输入C!!!),单击"保存",将文件在第二步新建的文件夹目录下。

保存C文件

命名C文件名

此时可以在新建文件中进行代码编写了,如包含头文件 #include <Reg52h>,但要注意,此时文件LCD1602MAINC并未与工程建立起联系。

此时的C文件还未和工程建立联系

第五步:将新建的文件添加到工程中,点击左边"Porject"选项框里面的"Target 1"前面的"+"号, 在展开的下拉菜单下看到"Source Group 1"。右键单击"Source Group 1"选项, 在下拉菜单中选择"Add Files to Group 'Source Group 1'"选项,d出一个文件选择对话框,单击选中刚才新建的c源文件,然后单击一次"Add"按钮,此时虽然对话框没有关闭,但是已经把c源文件添加到工程里了,这时只要再点击一次"Close"按钮即可把此对话框关闭(初学者经常以为c源文件没有被添加进去,还要按"Add"按钮)。这时发现左边的"Source Group 1"前面多了一个"+"号, 单击此"+"号展开, 发现下面出现了刚才我们新添加进去的c源文件"LCD1602MAINc"。

将C文件添加到工程中

选择要添加的文件

已将C文件成功添加到工程中

第六步:为了降低编程的疲劳,根据需要进行字体字号设置,点击如图"Edit"菜单最下面的"Configeruration"选项,

设置舒适的字体字号

根据自己的需要进行字体设置即可,

如何设置字体字号

一个新的Keil工程建立完毕

至此,一个全新的Keil工程建立完毕,开启自己的编程之旅吧!

了解更多

keil4编程是什么意思

编程必背50个程序

烧录程序的使用步骤

keil4怎么设置成中文

如何使用keil5进行编程

st语言编程入门与精通

①问,RS,RW,E 的设置为 读状态时序 的过程,读出来的数据(数据口P1) 的最高位 刚好即为 液晶的 忙碌 标志位。

②问,writecontrol(unsigned condata) 函数 是个 写指令 函数;

③问,空 *** 作 是为了让数据稳定后,才使能 液晶接收数据;

④问,写指令有时间 间隔要求,太频繁的读写会丢码,所以要加延时,三条38指令,是因为安全起见,上电后马上初始化会出现液晶电源不稳而丢码;

⑤问,液晶显示 只在 更新数据 的时候刷新一次即可,液晶会维持内容,无需重复刷新。

⑥附送,③和④问,都是驱动太恶心而造成的结果,好的驱动程序不需如此 *** 作。液晶的时序要求为ns级,单片机的指令周期普遍为us级,根本不需过多累赘。

#include"reg52h" //包含52头文件

#include"SMC1602Ah" //包含SMC1602A宏定义文件

#define BusyReadCount 10 //读忙标志等待次数

#define SMC1602_Data P0 //定义 数据接口

//sbit SMC1602_VO=P2^4; //定义 VO对比度接口

sbit SMC1602_RW=P2^5; //定义 R/W接口25

sbit SMC1602_RS=P2^6; //定义 RS接口26

sbit SMC1602_E=P2^7; //定义 E接口27

#define SMC1602_En SMC1602_E=1 //使能

#define SMC1602_Dis SMC1602_E=0 //禁止

uchar SMC1602_Read(bit read_type) //1602液晶屏读函数

{

uchar read_data;

SMC1602_Dis; //禁止使能

SMC1602_RW=ReadOperate; //读 *** 作

SMC1602_RS=read_type; //读类型:0状态,1数据

SMC1602_En; //开启使能

read_data=SMC1602_Data; //存储结果

SMC1602_Dis; //禁止使能

return read_data; //返回结果

}

void SMC1602_WriteByte(bit write_type,uchar write_data) //1602液晶屏读函数

{

uchar i=BusyReadCount;

for(;i;i--); //延时 *** 作,为写 *** 作预留回复时间

while((SMC1602_Read(CommOperate)&BusyState) &&(++i<=BusyReadCount)); //读取忙标志(BusyReadCount次),若均忙中,则不再读取忙标志,直接执行写 *** 作

//while(SMC1602_Read(CommOperate)&BusyState) if(++i>BusyReadCount) return; //读取忙标志,若BusyReadCount次均忙中,则不进行写 *** 作

//while(SMC1602_Read(CommOperate)&BusyState); //等待空闲(死等)

SMC1602_Dis; //禁止使能

SMC1602_RW=WriteOperate; //写 *** 作

SMC1602_RS=write_type; //写类型:0指令,1数据

SMC1602_Data=write_data; //写 *** 作,将 *** 作数送的数据口

SMC1602_En; //开启使能

SMC1602_Dis; //禁止使能

}

void SMC1602_WriteCGRAM(uchar write_buf,uchar start_loca,uchar word_num,uchar start_addr) //SMC1602写CGRAM函数,用于自定义字符

{

uchar i,j;

write_buf+=start_loca; //指向"需写入数据数组"的起始位置

SMC1602_WriteByte(CommOperate,CGRAMAddr|start_addr<<3); //写CGRAM *** 作,并将CGRAM起始地址设为 start_addr

for(j=0;j<word_num;j++) //自定义字符数量

for(i=0;i<8;i++) SMC1602_WriteByte(DataOperate,write_buf++); //写入一个自定义字符8个字节数据

}

void SMC1602_Init() //1602液晶屏初始化函数

{

uint i;

SMC1602_WriteByte(CommOperate,DisplayMode); //显示模式设置:16×2显示,5×7点阵,8位数据接口

SMC1602_WriteByte(CommOperate,ScreenMode|ScreenOn); //光标模式设置:开启整体显示,开启光标显示,开启光标闪烁

SMC1602_WriteByte(CommOperate,InputMode); //输入方式设置:关闭整屏移动,开启光标正移动(+1)

SMC1602_WriteByte(CommOperate,CleanLCD); //清屏,复位光标

SMC1602_WriteByte(CommOperate,FirstCol); //定位第一行

for(i=150;i;i--); //等待电源稳定,否则写CGRAM数据(自定义字符)时容易丢失,uint执行周期长,用uchar将会缩短时间,不足以稳定LCD

}

先利用电压互感器将市电高压降为低压,此时是电流信号经过一放大器转换为电压信号,此时依然是交流信号;然后再经过一芯片转换成有效值直流信号,由于此时信号比较小,再需要经过放大器放大,接入AD芯片,将模拟信号数字化(量化),最后接入单片机系统完成数据的处理与显示。 电压互感器选择DXPT202,结合武汉市场与性能价格比后确定的。通过DXPT202在限流电阻下取得2mA电流。然后通过OP07进行电流到电压的转换,由于考虑到后续器件的性能,这里转换来的电压信号要控制在200mV下,通过一较小电阻(小于100Ω,这里采用的是91Ω的精密电阻)即可满足要求。再通过AD736JN集成芯片前级经过OP07转换而来的交流电压信号转换成真有效值直流信号以便于模数转换。再一次将AD736JN的输出直流信号放大,由于AD736JN的输出电压信号小于200mV,不适宜模数转换。采用常用的ADC0809把OP07转换而来的模拟电压信号进行A/D转换。最后将ADC0809转换而来的数字信号送入AT89S51单片机处理并驱动LCD模块(1602)显示。

以上就是关于单片机编程步骤全部的内容,包括:单片机编程步骤、lcd1602液晶显示的程序、adc0809模数转换后让LCD1602显示汇编怎么处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9268936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存