模拟路灯控制系统完整版(附硬件图及源c程序)
更新时间:2024-01-07 08:54:01 阅读量: 教育文库 文档下载
- 模拟路灯控制系统设计推荐度:
- 相关推荐
模拟路灯控制系统
专 业: 班级学号: 学生姓名: 指导老师:
二〇一一 年 六 月
1
摘 要
本文介绍了一个模拟路灯控制系统的应用方案,用以实现模拟路灯的智能控制。本方案以宏晶公司的MCU芯片STC12C5410AD为核心,加以简单的外围电路,实现了模拟路灯控制系统所要求的全部技术内容。STC单片机在最近几年应用越来越广泛,因其抗干扰能力强、稳定性好,性价比高,因此是低成本路灯控制解决方案的首选。该控制系统除了选用廉价的单片机芯片,还采用了廉价的红外对射传感器,大大降低了系统成本。整个系统的电路简单,结构紧凑,电源驱动仅采用变压器与三端稳压器相结合,附加少许滤波电容便实现了稳定的电源输出。经过多次测试,证实该系统能长时间稳定工作,完全满足设计要求指标。
关键词:模拟控制;LED照明;单片机
2
ABSTRACT
This paper introduces a simulation control system application scheme street, to simulate the street lamp of intelligent control. This plan to macro crystal company MCU, STC12C5410AD as the core, to chip the periphery of the simple circuit, realize the simulation street lamp control system all of the requested technology content. STC SCM in recent years more and more wide application, because of its strong anti-interference ability, good stability, high performance/price ratio, and so is the low cost street lamp control solutions of choice. The control system in addition to choose cheap single-chip microcomputer chip, also adopted the cheap infrared mutual illuminate sensor, and greatly reduce the cost of system. The whole system of the circuit is simple, compact structure, power drive only used three transformer and the regulators, and the combination of a few additional filter capacitance will realize the stable power output. After many test, and confirm that the system can work stably for a long time, fully meet the design requirements index.
Keywords: Simulate controlling; LED lighting; Single-chip microcomputer
3
目 录
1 系统设计.............................................................. 1
1.1 设计要求 ........................................................ 1
1.1.1 基本要求................................................... 1 1.1.2 发挥部分................................................... 2 1.2 总体设计方案 .................................................... 2
1.2.1 功能分解及设计思路......................................... 2 1.2.2 方案论证与比较............................................. 2 1.2.3 系统各模块的最终方案....................................... 5 1.3 系统功能说明书(用户使用说明书) ................................ 5
1.3.1 路灯的工作模式............................................. 5 1.3.2 按键操作说明............................................... 6
2 单元电路设计.......................................................... 6
2.1 电源供电电路 .................................................... 6 2.2 单片机最小系统 .................................................. 7 2.3 输入与输出 ...................................................... 7 2.4 电流源驱动 ...................................................... 8 3 软件设计.............................................................. 9
3.1 系统主程序流程图................................................. 9
3.1.1系统流程图 ................................................. 9 3.1.2 定时器溢出中断处理函数流程图.............................. 10 3.1.3 按键扫描流程图............................................ 11 3.2 系统子程序 ..................................................... 11 4 系统测试............................................................. 12
4.1 测试仪器 ....................................................... 12 4.2 指标测试 ....................................................... 13
4.2.1 各部分测试的指标.......................................... 13 4.2.2 系统实现的功能............................................ 13
5 结论................................................................. 15 参考文献............................................................... 16 附录 1 程序代码........................................................ 17 附录 2 硬件原理图...................................................... 29 附录 3 PCB图(部分) .................................................. 30
4
1 系统设计
1.1 设计要求
设计并制作一套模拟路灯控制系统。控制系统结构如图1.1所示:
LED灯1输入、显示装置LED灯2单元控制器1单元控制器2支路控制器
图1.1 模拟路灯控制系统
路灯布置如图1.2所示:
LED灯240定位点404020MLED灯1S’4040ACB
S图1.2 路灯布置示意图(单位:cm)
1.1.1 基本要求
(1)支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。
(2)支路控制器应能根据环境明暗变化,自动开灯和关灯。
(3)支路控制器应能根据交通情况自动调节亮灯状态:当可移动物体M(在物体前端
1
该电路采用变压器与三端稳压器相结合。使220V电压经变压器变压,降为12V。过整流桥并利用两个容量较大的电容滤波,从而得到较为稳定的直流电压。通过7805型号的三端稳压器稳压之后,输出一个电压为5V,电流为750mA的直流电源。
2.2 单片机最小系统
图2.2
该控制系统的核心芯片采用的是STC12C5404AD,它的最小系统由STC单片机,电容和晶振组成。上电瞬间,电源经复位电容向单片机发送一个高电平信号,使单片机复位。同时晶振起振,使单片机工作。晶振的大小可根据实际需要进行选择,常用的晶振有4M,6M,11.0592M,12M,24M等。
2.3 输入与输出
图2.3 按键输入
按键输出采用AD变换,节省了IO口资源。通过不同大小的电阻进行分压,按下不同的按键就会向单片机发送不同的电压值。如:按下s1是0V;按下s2,电压=2K/(2K+10K)*5V=0.83V。经过单片机AD变换之后,就可以判断是哪个按键按下去,从而执行相应的功能。
7
图2.4 显示输出
该控制系统采用LED数码管显示输出。LED数码管最突出的特点是使用简单,价格低廉。在该系统中主要用来显示数字时钟,显示模式设定等。
2.4 电流源驱动
图2.5
电流源驱动电路,是为驱动1W 大功率LED灯而设计的。LED灯属于电流源驱动,根据计算,每个1W的LED灯至少需要200mA的驱动电流才能点亮,而单片机的IO输出电流实际只有20mA到30mA,所以必须经过电流放大才能使其工作。因此在该电路中采用了一个9013对电流进行放大。
8
3 软件设计
3.1 系统主程序流程图
3.1.1 系统流程图
开始单片机存储器及变量初始化显示初始化对几路模拟信号轮流进行采样,每2毫秒采样一个信号按键扫描及处理检测环境的明暗度并决定是否自动开关灯路灯的故障检测检测交通情况,并根据交通情况对路灯的开关进行管理定时管理 图3.1 系统流程图
9
3.1.2 定时器溢出中断处理函数流程图
开始1毫秒变量递增否到达1毫秒时刻是清零1毫秒变量,设置激光传感器扫描标志,2毫秒变量递增否到达2毫秒时刻是清零2毫秒变量,设置2毫秒标志,20毫秒变量递增否到达20毫秒时刻是清零20毫秒变量,设置20毫秒标志,1秒变量递增,管理蜂鸣器响的时间否到达1秒时刻是清零1秒变量,设置1秒标志,管理报警灯,如果需要响蜂鸣器,则驱动蜂鸣器清中断标志退出 10
图3.2 定时器溢出中断处理函数流程图
3.1.3 按键扫描流程图
开始对按键的扫描线进行AD采样判断AD值是否大于245否是按键消抖并根据AD值确定键值按键处理复位按键扫描的相关变量退出
图3.3 按键扫描流程图
3.2 系统子程序
本系统包含以下子程序
//键盘处理------------------------------
void KeyboardScan(void);//键盘扫描函数
void KeyboardOperate(uchar KeyNum);//按键处理函数
//定时器处理------------------------------ void InitTimer(void);//定时器参数设定及启动
//路灯控制------------------------------
void BrightnessSet(uchar LightNum, uchar Brightness);//亮度调整
//延时函数----------------------------- void delay(uint i);
11
//AD采样------------------------------
void InitADC(); //ADC转换初始化 uchar GetADCResult(uchar ch); //取ADC转换初值 uint get_adc(uchar ch); //对ADC取值进行操作
//显示函数--------------- void display();
//蜂鸣器发生函数----------------- void speak();
/************************************************************** * 亮度调整函数 * **************************************************************/ void BrightnessSet(uchar LightNum, uchar Brightness);
/************************************************************** * 中断处理程序 * **************************************************************/
void t0() interrupt 1 using 1 void t1() interrupt 3
4 系统测试
4.1 测试仪器
数字示波器: 该系统采用红外对射传感器,因为它的正常工作需要外加38KHz的触发频率。 数字示波器主要用来测量频率。
万 用 表: 在该系统中用来测量电压、电流、电阻等。
12
4.2 指标测试
4.2.1 各部分测试的指标
表1—2 功能测试
序号 1 2 3 4 5
指标(目标值) 故障指示(编号) 过中点后前灯亮后灯灭,试验成功率(100%) 自动开关灯功能,试验成功率 实时误差,采用时间加速方法(误差小于5MIN) 单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在20%~100%范围内设定并调节,调节误差≤2%。 实测值 LED上显示正确 100% 100% 误差<1MIN 电流从0mA至750mAm变化平缓稳定 4.2.2 系统实现的功能
表2—1 基本要求
序号 1 2 功能 支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。 支路控制器应能根据环境明暗变化,自动开灯和关灯。 支路控制器应能根据交通情况自动调节亮灯状态:当可移动物体M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达S点时(见图2),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由右至左移动时,则亮灯次序与上相反。 支路控制器能分别独立控制每只路灯的开灯和关灯时间。 当路灯出现故障时(灯不亮),支路控制器应发出声光报警信号,并显示有故障路灯的地址编号。 是否实现 是 是 3 是 4 5
是 是 表2—2 发挥部分 序号 1 2
功能 自制单元控制器中的LED灯恒流驱动电源 单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在20%~100%范围内设定并调节,调节误差≤2%。 是否实现 是 是
13
表2—3 特色功能
序号 1 2 3 4
功能 自制微型红外光发射与光敏电阻组合替代工业光电传感器 利用单片机的AD变换功能,实现用一个IO口读多个按键 使用单片机内部的定时器代替时钟芯片,实现时钟功能和定时开关机功能 采用PWM与电流取样方式,实现闭环的恒流源控制 是否实现 是 是 是 是
14
5 结论
该系统调试最终结果,符合本次设计的全部要求。经过功率扩大、电网通讯等方面的改良,就能用于实际路灯控制。以其超低成本,高可靠性的特点,与其他现有成品相比,具有一定的竞争优势。
该控制系统在调试过程中,遇到过一些与理论相差很大的实际问题。比如红外对射传感器的对焦问题,因为红外线是不可见光,对焦比较麻烦,但是借用其他辅助工具就会简单很多。最简便的方法是利用带摄像头的手机来获取红外光,从而能顺利完成对红外对射传感器的对焦。红外对射的接收部分,因受频率限制,只能接收频率在38KHz的红外信号,所以在调试过程中有一定的难度。经方案论证,采用PWM脉宽调制输出,是切实可行的最有效方案。程序书写如下:
#include
sbit pwmout=P1^1; //定义PWM输出端口 void init() interrupt 1 //中断方式1 {
TH0=0xff;TL0=0xf3; //定时器初值 pwmout=~pwmout; //对PWM输出取反,产生一高一低的脉冲信号 }
void main() {
TMOD=0X11; //定时计数器工作在1方式 TH0=0xff;TL0=0xf3; //初始化初值
EA=1;ET0=1;TR0=1;//开总中断,允许定时器1中断,开定时器1中断 while(1); }
15
参考文献
[1] 于殿泓,王新年.单片机原理与程序设计实验教程[M].西安:西安电子科技大学出版社,2007,8.
[2] 赵文博,刘文涛.单片机语言C51程序设计[M].北京:人民邮电出版社,2005,10.
[3] 李爱秋.红外线遥控12位电子密码锁的设计[J]. 温州职业技术学院学报第8卷第一期,2008.
[4] 陈杰,黄鸿.传感器与检测技术[M].北京:高等教育出版社,2010,8. [5] 周航慈. 单片机应用程序设计技术[M]. 北京:北京航空航天大学出版社,2011,2.
[6] 李朝青. 单片机原理及接口技术[M]. 北京:北京航空航天大学出版社, 2005,10.
[7] 孙育才. MCS-51系列单片微型计算机及其应用[M]. 东南大学出版社, 2004,6. [8] 沈红卫. 单片机应用系统设计实力与分析[M]. 北京:北京航空航天大学出版社,2003.
[9] 徐爱钧, 彭秀华. 单片机高级语言C51应用程序设计[M].北京航空航天大学出版社,2006.
[10] 曾一江. 单片微机原理与接口技术[M]. 北京:科技出版社,2009,12. [11] 康华光. 电子技术基础(模拟部分)[M]. 北京:高等教育出版社, 2004,4.
16
附录1 程序代码
#include\#include \#include
uchar dis[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3e,0x77, 0x40,0x00,0x76,0x71,0x37,0x79,0x31,0x38};//10_V,A,-,熄灭,H,F_15,N,E,R,L////// sfr ADC_RES = 0xC6; //ADC high 8-bit result register /////
#define ADC_POWER 0x80 //ADC power control bit #define ADC_FLAG 0x10 //ADC complete flag #define ADC_START 0x08 //ADC start control bit #define ADC_SPEEDLL 0x00 //420 clocks #define ADC_SPEEDL 0x20 //280 clocks #define ADC_SPEEDH 0x40 //140 clocks
#define ADC_SPEEDHH 0x60 //70 clocks ////////////////////////ISP//////////////////
#define ENABLE_ISP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值 ///////////////////////////////////////////////////////////////////////////// sbit k1=P1^0;//按钮 sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3; sbit k5=P1^4;
sbit cgq_a=P1^3; sbit cgq_b=P1^4; sbit cgq_c=P3^0; sbit zishi=P3^1;
////
sbit en1=P3^4;//373使能端 端码 sbit en2=P3^5;//373使能端 位码 ///
sbit feng=P3^7; ///
sbit led1=P3^2; sbit led2=P3^3;
/////////函数定义部分 uchar d[8];
17
char shi=0,fen=0,miao=0,set_miao=0,pwm,k3num=0,
set_fen=0;set_on_shi=0,set_off_shi=0,light=0,pwm_count=0; bit shijian_bit=1,pwm_bit=1,light_bit=1,bad_deng1=0,bad_bit=0, bad_deng2=0,display_bit=0,auto_mode=1,sdong=1,sdong_bit=0; uint sum2=0,shi_count=0,sum_deng1,sum_deng2,kk,jj,ff,ii; ////
void IAP_Disable();
uchar Byte_Read(uchar addh,uchar addl); void Sector_Erase(uchar addh,uchar addl);
void Byte_Program(uchar addh,uchar addl, uchar ch); //////////////////////////////// void InitADC(); uchar GetADCResult(uchar ch); uint get_adc(uchar ch); ///////////// void delay(uint i); void jiyi();
void read_jiyi(); void run_shijian();
//ADC转换初始化 //取ADC转换初值
//取ADC转换数据10位
//延时1MS
/////////////////////////////////////////////////////////////////////////
void delay(uint i)//延时函数 {
uint a,b;
for(a=0;a
}
//////////////////
void display()//显示函数 {
uchar i,s=0x01; for(i=0;i<8;i++)
P2=0xff;
en2=1;en2=0; s=s<<1;
18
{
P2=dis[d[i]]; en1=1;en1=0; P2=~s;
en2=1;en2=0; delay(4);
}
}
void chaizi()//拆字函数 { d[0]=shi/10; d[1]=shi; d[2]=12; d[3]=fen/10; d[4]=fen; d[5]=12; d[6]=miao/10;
d[7]=miao;
}
void speak()//蜂鸣器发生函数 { feng=0; delay(10); feng=1;
}
void t0() interrupt 1 using 1 { TH0=0Xfc;TL0=0X18; if(light_bit) {
if(pwm_count>=10) pwm_count=0; else pwm_count++;
if(pwm_count<=pwm) led1=led2=1; else led1=led2=0; /////////////////// sum2=get_adc(7); sum2=sum2*48/1000;
if(sum2<5) {led1=led2=1;} else if(sum2<15) {
pwm=9;
}
else if(sum2<35)
{
pwm=0; }
else if(sum2<45) {led1=led2=0;}
19
else ;
}
if(shijian_bit) {
if(shi_count<500) shi_count++; if(miao>=60){miao=0;fen++;}
else{miao++;shi_count=0;} if(fen>=60){fen=0;shi++;} if(shi>23){shi=0;}
}
////////////// if(kk<=2000) kk++;
else {kk=0;bad_bit=1;} if(ff<=1000) ff++;
else {ff=0;ii++;bad_bit=0;if(ii==6){ii=0;}} //////////////////
////////////////////////// sum_deng1=get_adc(6); sum_deng1=sum_deng1*48/1000;//光敏检测灯A
if(sum_deng1>=25) bad_deng1=1;
else bad_deng1=0; ////////////////////////////////// sum_deng2=get_adc(5); sum_deng2=sum_deng2*48/1000;//光敏检测灯B
if(sum_deng2>=25) bad_deng2=1; else bad_deng2=0;
}
void set_time()//设置时间 { while(1) {
shijian_bit=0; d[5]=12; d[6]=miao/10; d[7]=miao;
d[0]=d[1]=d[2]=d[3]=d[4]=13; display(); if(k4==0) {
while(!k4)display(); speak(); if(miao<59) miao=miao+1;
20
else miao=0;
}
if(k5==0) { while(!k5)display(); speak(); miao=miao-1; if(miao<=0) miao=59;
} if(k1==0) { while(!k1)display(); speak(); goto m1;
}
} m1: while(1) { shijian_bit=0;
d[2]=12; d[3]=fen/10; d[4]=fen;
d[0]=d[1]=d[5]=d[6]=d[7]=13; display(); if(k4==0) { while(!k4)display(); speak(); if(fen<59) fen=fen+1; else fen=0;
}
if(k5==0) { while(!k5)display(); speak(); fen=fen-1; if(fen<=0)
fen=59;
}
if(k1==0)
{
21
{
}
}
while(!k1)display(); speak(); goto m2;
m2: while(1)
shijian_bit=0; d[0]=shi/10; d[1]=shi;
d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=13; display(); if(k4==0) { } if(k5==0) {
while(!k5)display(); speak(); shi=shi-1; if(shi<=0) shi=23;
while(!k4)display(); speak(); if(shi<23) shi=shi+1; else shi=0;
}
if(k1==0) { }
while(!k1)display(); speak(); goto m3;
}
m3:jiyi();shijian_bit=1; }
void jiyi()//存储函数 {
Sector_Erase(0x2a,0x00); delay(10);
Byte_Program(0x2a,0x01,shi); delay(10);
Byte_Program(0x2a,0x02,fen);
22
delay(10);
Byte_Program(0x2a,0x03,miao); delay(10);
Byte_Program(0x2a,0x04,set_on_shi); delay(10);
Byte_Program(0x2a,0x05,set_off_shi);
delay(10);
}
void read_jiyi()//读出存人的值 { shi=Byte_Read(0x2a,0x01); delay(10);
fen=Byte_Read(0x2a,0x02); delay(10);
miao=Byte_Read(0x2a,0x03); delay(10);
set_on_shi=Byte_Read(0x2a,0x04); delay(10);
set_off_shi=Byte_Read(0x2a,0x05);
delay(10);
}
void set_on_off()//设置开关灯时间 {
while(1) { d[3]=0; d[4]=16;
d[5]=12;
d[6]=set_on_shi/10; d[7]=set_on_shi; d[0]=d[1]=d[2]=13; display(); if(k4==0) { while(!k4)display(); speak(); if(set_on_shi<23) set_on_shi=set_on_shi+1; else set_on_shi=0;
} if(k5==0) { while(!k5)display();
speak();
23
set_on_shi=set_on_shi-1;
if(set_on_shi<=0) set_on_shi=23; }
if(k2==0) { while(!k2)display(); speak(); goto m1;
}
} m1: while(1) { d[2]=0;d[3]=d[4]=15; d[0]=d[1]=13;d[5]=12; d[6]=set_off_shi/10; d[7]=set_off_shi; display(); if(k4==0) { while(!k4)display(); speak();
if(set_off_shi<23)
set_off_shi=set_off_shi+1; else set_off_shi=0;
}
if(k5==0) { while(!k5)display(); speak();
set_off_shi=set_off_shi-1; if(set_off_shi<=0)
set_off_shi=23;
}
if(k2==0) { while(!k2)display(); speak(); goto m2;
}
}
m2:jiyi();shijian_bit=1; }
24
void main()//主函数 {
// //
P2M0=0x00;P2M1=0xff; TMOD=0x11;
TH0=0Xfc;TL0=0X18; TH1=0xff;TL1=0x9c; EA=1;ET0=1;TR0=1; EA=1;ET1=1;TR1=1; P3M0=0x00;P3M1=0xff; InitADC(); delay(10); read_jiyi(); zishi=1; if(bad_bit) { } if(k1==0) {
while(!k1)display(); speak();
set_time();//设置时间
if(bad_deng1==1){bad_deng1=0;goto loop1;}//1 if(bad_deng2==1){bad_deng2=0;goto loop3;}//2
if(bad_deng1==1&&bad_deng2==1){bad_deng2=bad_deng1=0;;goto loop2;}//1.2
loop:
}
if(k2==0) { }
if(sdong_bit) { } chaizi(); display(); if(k3==0) {
while(!k3); speak();
25
while(!k2)display(); speak();
set_on_off();//设置开关灯时间
if(shi>=set_on_shi){led1=led2=0;sdong=1;} if(shi>=set_off_shi){led1=led2=1;sdong=0;}
/////////////////
k3num++;
switch(k3num%2) { case
1:zishi=0;led1=led2=0;bad_bit=0;auto_mode=1;sdong=1;sdong_bit=0;light_bit=1;break;//自动模式 case
0:zishi=1;led1=led2=1;bad_bit=1;auto_mode=1;sdong=0;sdong_bit=1;light_bit=0;break;//手动模式 } }
if(auto_mode)//自动模式 { if(sdong)
{
if(cgq_a==0&&cgq_b==1&&cgq_c==1){led1=0;led2=1;}//3.2开 if(cgq_a==1&&cgq_b==0&&cgq_c==1){led1=1;led2=0;}//3.2关
if(cgq_a==1&&cgq_b==1&&cgq_c==0){led1=1;led2=1;}//3.2关 }
} goto loop; //////////////////////////
loop2: if(ii==3||ii==6) {bad_bit=0;goto loop;} bad_bit=0;
d[0]=17;d[1]=18;d[2]=d[5]=12;d[3]=19; d[4]=1;d[6]=19;d[7]=2;//ER-L1-L2 display();
if(bad_deng1==0||bad_deng2==0) goto loop;
goto loop2; loop1: if(ii==3||ii==6) {bad_bit=0;goto loop;} bad_bit=0;
d[0]=17;d[1]=d[2]=d[4]=18;d[3]=0;d[5]=12; d[6]=19;d[7]=1;//ERROR-L1 display();
if(bad_deng1==0) goto loop;
goto loop1;
loop3:
26
3.3 关 3.3开 3.3 关
if(ii==3||ii==6) {bad_bit=0;goto loop;}
bad_bit=0;
d[0]=17;d[1]=d[2]=d[4]=18;d[3]=0;d[5]=12; d[6]=19;d[7]=2;//ERROR-L2 display();
if(bad_deng2==0) goto loop; goto loop3; }
/////////////
uint get_adc(uchar ch)
{uint adc_r;
adc_r=GetADCResult(ch)*4+ADC_LOW2; return(adc_r); }
/////////////////
uchar GetADCResult(uchar ch)
{ ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; _nop_(); //Must wait before inquiry _nop_();
_nop_(); _nop_();
while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag ADC_CONTR &= ~ADC_FLAG; //Close ADC return ADC_RES; //Return ADC result }
///////////
void InitADC() {
P1 = P1M1 =P1M0 =0xff; //Set all P1 as Open-Drain mode
ADC_RES = 0; //Clear previous result ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
delay(2); //ADC power-on and delay }
/////////////////////////////////////////////////////////// uchar Byte_Read(uchar addh,uchar addl) {
IAP_DATA = 0x00;
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间 IAP_CMD = 0x01; //IAP/ISP/EEPROM 字节读命令
27
IAP_ADDRH = addh; //设置目标单元地址的高8 位地址 IAP_ADDRL = addl; //设置目标单元地址的低8 位地址
EA = 0;
IAP_TRIG = 0x46; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xb9; //送完A5h 后,ISP/IAP 命令立即被触发起动 _nop_();
EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 return (IAP_DATA); }
//字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据 void Byte_Program(uchar addh,uchar addl, uchar ch) {
IAP_CONTR = ENABLE_ISP; //打开 IAP 功能, 设置Flash 操作等待时间 IAP_CMD = 0x02; //IAP/ISP/EEPROM 字节编程命令
IAP_ADDRH = addh; //设置目标单元地址的高8 位地址 IAP_ADDRL = addl; //设置目标单元地址的低8 位地址
IAP_DATA = ch; //要编程的数据先送进IAP_DATA 寄存器 EA = 0;
IAP_TRIG = 0x46; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xb9; //送完A5h 后,ISP/IAP 命令立即被触发起动 _nop_();
EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 }
//擦除扇区, 入口:DPTR = 扇区地址
void Sector_Erase(uchar addh,uchar addl) {
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间 IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令
IAP_ADDRH = addh; //设置目标单元地址的高8 位地址 IAP_ADDRL = addl; //设置目标单元地址的低8 位地址
EA = 0;
IAP_TRIG = 0x46; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xb9; //送完A5h 后,ISP/IAP 命令立即被触发起动
28
_nop_();
EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 }
void IAP_Disable()
{
//关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 IAP_CONTR = 0; //关闭IAP 功能
IAP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用 IAP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用 IAP_ADDRH = 0; IAP_ADDRL = 0; }
附录 2 硬件原理图
29
附录3 PCB图(部分)
30
正在阅读:
和谐作文600字02-04
在我校体育中考动员大会上的讲话08-07
哺乳假申请书怎么写【5篇】03-27
学生个人检讨书(优秀9篇)03-27
国务院公布:2017年放假安排时间表02-15
发电厂电气部分课程设计报告09-19
13年五一放假安排时间表02-08
人才学知识12-13
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 整版
- 控制系统
- 路灯
- 模拟
- 硬件
- 程序
- 图及
- 关于落实工程计划加快工程进度的函2(精)
- 高钙血症的原因
- 2014年昆明市五华区教师招聘考试(小学语文)模拟试题五
- 人教版五年级数学乘法交换律结合律教学设计
- 邵阳市二中2011-2012学年高二下学期期中考试(文)历史试题及答案8
- 北师大版小学语文四年级上册全册教案(1)
- 五年级上册音乐教案-雨花石1 - 人音版简谱
- 单项劳务分包协议书
- 机械设备安装
- 2015秋新生系部会议讲话稿
- 新课标2017届高考地理二轮专题复习专题一第1讲地球仪地图及地理信息技术的应用试题
- 2019-2020年九年级物理全册 17.3 测量小灯泡的电阻导学案(新版)新人教版
- 鲁教版六年级上册数学第二单元第一节选择题练习题1(1)
- 2016年科普知识试题库
- CAMA第6章本量利及决策练习
- 公共行政学范式
- 公共政策学案例分析
- 《幼儿游戏与玩具》网上形考作业答案及评分标准
- 安监部职务说明书
- 新民事诉讼法执行程序修改解读