
打开keil软件,选择菜单栏的project,在它的下拉菜单里选第一个New uVision project,这里将这个工程命名为qq,并保存到我们建立的qq文件夹内,点击确定后,会d出下面对话框
找到Atmel,在它的左侧有+号,点击会展开一系列芯片型号,找到AT89C51,点击并点选下面的ok,d出下面的对话框,选择 否
进入编辑页面后,看到左侧空白窗格的+Target 1,点击它前面的+号,d出Source Group 1. 右击Source Group 1. d出下面下拉菜单,选择Add Files to Group Source Group 1
d出的对话中,选择LED.C,点击add,然后点击close关闭窗口。点击Source Group 1的+号,就会显示出添加的LED.C文件,双击LED.C就会出现它的代码(如果是.asm文件,请选择all files,看下图)
右击+Target 1,并选择第一项,d出下面对话框,选择debug,点上use,并选择keil moniter-51 driver
在点output选项,在creat hex file打勾,最后点击ok
回到编辑面,依次点击编译按钮,Target 1上面有三个带向下的箭头按钮,从左到右点击,回到qq文件夹看看是否有.hex文件,若没有在编译一次
将单片机与电脑连机,打开烧录软件,选择低速下载,点击打开文件,选择建立的qq文件夹,打开后点击文件qq.hex,最后选择STC89C5XX系列,然后下载程序,成功后图片如下
接线图为p0端口与led
一. 安装单片机程序编译软件KEIL。1.点击图标 运行直至安装完成。
2.点击图标 运行KEIL,然后选择菜单“project”点击“new……”点击“ ”建立新的工程。填写好工程文件名选择保存路径后按“保存”,此时d出一个窗口如下图所示
点击Atmel左边的+号展开CPU的型号,选择“AT89C51”按“确定”再生成一个对话框如下图,再按“是”即可。
这时在工程左边的文件指示栏中多了一个 这样的图标,点其左边的+号可展开当前所包含的文件。
选择菜单“File”“new”新建一个文本编辑器,按保存按钮,在d出的窗口填入文件名后缀为.C ,然后按保存即把这个C文本文件保存到这个工程的目录下。
再在工程左边的文件指示栏中指着 点击右键选择 选项把刚才建立的C文件加入来,按“Add”即可加入,这时就可以在C文本编辑器里编号程序了。
写好程序后选择菜单“project”选择“ ”打开的对话框如下图所示
如果d出来的不是这个对话框时可以重复一次“project”选择“ ”便可以打开,打开后在 这个方框里打上勾然后按“确定”才可以编译生成单片机的烧写文件HEX文件。这些选项都设置好并写好源程序后就可以在菜单选项project选项中选择 选项对源程序进行编译,生成的HEX文件就在工程的目录下。
本文章后面附带的是HJSMSY-V1.0开发板的测试源程序,读者可以将其复制到编译器里编译。此程序为一个简单的计算器功能程序,数写键依次对应电路板上的数字0--9,“A”键功能为清除,“B”键功能为等于,“C”键功能为+,“D”键功能为-,“E”键功能为*,“F”键功能为除。
二. 把单片机开发板用9针串口线与电脑连接好,用配套的USB供电线将单片机开发板供电,并关闭电路板上的电源开关。运行STC芯片烧写软件,
点击图标
打开下载界面如下图
按这个图里面的设置设好参数后,点击“Open File/打开文件”打开HEX文件,在打开的对话框中找到刚才所建立工程的目录,在此目录下可以找到刚才编译得到的HEX文件,如果找不到则是还没有在 这个方框里打上勾,回到工程里打上勾并按 编译一次就行了。打开HEX文件确定后就点击下载软件的 ,再打开单片机开发板上的电源开关,这时电脑便自动与单片机连接并把程序下载到单片机里,下载完成后会有声音提示的,或者可以在软件界面上看得到。注:STC系列单片机是在开机的瞬间下载程序的,如果还未能连接成功可以关掉电源再开一次即可。
//HJSMSY-V1.0单片机开发板测试程序.C
//-----------------------------------------------
// <<计算器>>
//-----------------------------------------------
//编写人:李春起
//编定日期:2010.06.26
//修改日期:
//============================================================
#include <AT89X52.H>
#define uchar unsigned char
#define uint unsigned int
uint comdata,vardata,dispdata
unsigned char flag=0,incflag=0,maxflag=10,maxvar=1
//===========共阳数码管段码表==================================
uchar code SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}
uchar code ACT[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}
//================引脚定义=======================================
sbit yy=P3^2
sbit jk=P3^4
sbit k1=P2^3
sbit k2=P2^2
sbit k3=P2^1
sbit k4=P2^0
//=====子函数声明======================================
void init(void)
void delay1(uint z)
void kk(void)
//===========程序初始化===============================
void init(void)
{
TMOD=0x01
TH0=0xf4
TL0=0x48
ET0=1
TR0=1
EA=1
}
//=====空 *** 作延时子程序=======================
void delay1(uint z)
{
uint j,y
yy=0
for(j=0j<zj++)
{for(y=0y<100y++){}}
yy=1
for(j=0j<zj++)
{
for (y=0y<3422y++)
}
}
//========键盘扫描子程序===================
void kk(void)
{ P2=0xf0
if(P2!=0xf0)
{
P2=0xef
if(!k1){delay1(15)comdata=vardatavardata=0incflag=1}//k13
if(!k2){delay1(15)comdata=vardatavardata=0incflag=2}//k14
if(!k3){delay1(15)comdata=vardatavardata=0incflag=3} //k15
if(!k4){delay1(15)comdata=vardatavardata=0incflag=4}//k16
P2=0xdf
if(!k1){delay1(15)if(vardata>6553){goto ab1}vardata=((vardata*10)/maxflag+8*maxvar)dispdata=vardata} //k9
ab1:if(!k2){delay1(15)if(vardata>6553){goto ab2}vardata=((vardata*10)/maxflag+9*maxvar)dispdata=vardata} //k10
ab2:if(!k3){delay1(15)vardata=0dispdata=vardata} // k11
if(!k4){delay1(15)switch (incflag){
case 1:{vardata=(comdata+vardata)dispdata=vardata}break
case 2:{vardata=(comdata-vardata)dispdata=vardata}break
case 3:{vardata=(comdata*vardata)dispdata=vardata}break
case 4:{vardata=(comdata/vardata)dispdata=vardata}break
default:break
}
}//k12
P2=0xbf
if(!k1){delay1(15)if(vardata>6553){goto ab3}vardata=((vardata*10)/maxflag+4*maxvar)dispdata=vardata} //k5
ab3:if(!k2){delay1(15)if(vardata>6553){goto ab4}vardata=((vardata*10)/maxflag+5*maxvar)dispdata=vardata} //k6
ab4:if(!k3){delay1(15)if(vardata>6553){goto ab5}vardata=((vardata*10)/maxflag+6*maxvar)dispdata=vardata} //k7
ab5:if(!k4){delay1(15)if(vardata>6553){goto ab6}vardata=((vardata*10)/maxflag+7*maxvar)dispdata=vardata}//k8
ab6:P2=0x7f
if(!k1){delay1(15)if(vardata>6553){goto ab7}vardata=((vardata*10)/maxflag+0*maxvar)dispdata=vardata} //k1
ab7:if(!k2){delay1(15)if(vardata>6553){goto ab8}vardata=((vardata*10)/maxflag+1*maxvar)dispdata=vardata} //k2
ab8:if(!k3){delay1(15)if(vardata>6553){goto ab9}vardata=((vardata*10)/maxflag+2*maxvar)dispdata=vardata} //k3
ab9:if(!k4){delay1(15)if(vardata>6553){goto ab10}vardata=((vardata*10)/maxflag+3*maxvar)dispdata=vardata} //k4
ab10:
}
}
//======定时器0中断服务子程序================
void time0(void) interrupt 1
{
TH0=0xf4
TL0=0x48
P0=0xffP1=0xff
// 时钟显示子程序
switch(flag)
{
case 0:{P0=SEG7[dispdata%10]P1=ACT[0]flag=1}break
case 1:{P0=SEG7[(dispdata/10)%10]P1=ACT[1]flag=2}break
case 2:{P0=SEG7[(dispdata/100)%10]P1=ACT[2]flag=3}break
case 3:{P0=SEG7[(dispdata/1000)%10]P1=ACT[3]flag=4}break
case 4:{P0=SEG7[dispdata/10000]P1=ACT[4]flag=5}break
case 5:{P0=SEG7[0]P1=ACT[5]flag=0}
default:break
}
}
//=========主函数======================================
void main()
{
init()
yy=1
jk=0
while(1)
{
if((vardata/1000)>=9){maxflag=10maxvar=0}
else {maxflag=1maxvar=1}
kk()
}
}
在keil中对其进行如下设置,便能产生hex文件:点击菜单“Option for Tagret '...'” --->选择“Output”页--->钩选“Create HEX File”--->重编译
如果程序无误,在Project的当前目录即会产生HEX文件
再将这个HEX文件用下载线或编译器写进单片机就行了啊
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)