参考文献
[1] 柴钰. 单片机原理及应用[M]. 西安:西安电子科技大学出版社,2009.
[2] 唐继贤.51单片机应用系统开发实例精解[M].上海:上海科学技术出版社,2012. [3]常喜茂,孔英会,付小宁.C51基础与应用实例[M].北京:电子工业出版社,2009 [4]皮大能,南广群,刘金华.单片机课程设计指导书[M].北京:北京理工大学出版社,2010
[5]杨欣,王玉凤,张延强.51单片机应用实例详解[M].北京:清华大学出版社,2010 [6] 李全利,迟荣强. 单片机原理及接口技术[M]. 北京:高等教育出版社,2004. [7] 余永权. ATMEL 89系列单片机应用技术[M]. 北京:北京航空航天大学出版社,2002.
[8] 胡汉才. 单片机原理及系统设计[M]. 北京:清华大学出版社,2002.
[9]谢维成,杨加国.单片机原理与应用及C51程序设计[M].北京:清华大学出版社,2009 [10]唐颖.单片机原理应用C51程序设计[].北京:北京大学出版社,2008
[11]马斌,韩忠华,王长涛,夏兴华.单片机原理及应用[M]:C语言程序设计与实现[M]-北京:人民邮电出版社,2009
[12]李玮,赵江,刘建业.一种实用的单片机控制的数字式调速系统。
[ 13] 浦龙梅, 李私. 单片机控制的直流PWM 调速装置的研究[ J] . 变频器世界, 2006, ( 03): 48) 51.
[ 14]王志良. 电力电子新器件及其应用技术[M ].北京:工业出版社, 1995.
[15]何涛.数字式电机调速系统的设计与分析[D].西安交通大学硕士学位论文,2002 [16]王立红.基于单片机的直流电机控制系统设计[J].知识与经济,2011 [17]邸春芳.车载MP3的系统设计[D].西南石油大学硕士学位论文,2006
- 32 -
附 录 一
参考程序清单
主程序清单:
#include
unsigned int HigCount = 0xFF00; unsigned int LowCount = 0xFA00; unsigned int SpeedCount = 0; unsigned int DisplayCount = 0; float FI;
unsigned int NI; int FLAG_DIS = 0;
unsigned char ID7,ID6,ID5,ID4,ID3,ID2,ID1,ID0,ID; //unsigned char ID;
void Inittimer(void) //定时器初始化 {
TMOD = 0X11; //两个定时器都是方式1 EA = 1; ET0 = 1; ET1 = 1; TR0 = 0; TR1 = 0; IT0 = 1; //外部中断是脉冲触发方式的 }
void time0_int(void) interrupt 1 using 3 //TIMER0_ISR {
TR0=0; //停定时器0 ENB = 1;
TH1 = HigCount/256; TL1 = HigCount%6; TR1=1; //开定时器1 DisplayCount++; //测速计数的变量 if(DisplayCount>=0x1F4) { EX0 = 0; TR1 = 0; START = 0; START = 1;
- 33 -
START = 0; while(EOC==1){} //AD转换的输出高组态 while(EOC==0){} // AD转换结束 ChuLi(); SpeedCount = SpeedCount * 120; if(FLAG_DIS ==0) displaydata_SP(); SpeedCount = 0; DisplayCount = 0; EX0 = 1; TR1 = 1; } }
void time1_int(void) interrupt 3 using 3 {
TR1=0; ENB = 0; TH0 = LowCount/256; TL0 = LowCount%6; TR0=1; }
void INT0_ISR(void) interrupt 0 using 3 { SpeedCount++; }
void ChuLi(void) { OE = 1; delay(1); ID7 = P0<<7 & 0x80; ID6 = P0<<5 & 0x40; ID5 = P0<<3 & 0x20; ID4 = P0<<1 & 0x10; ID3 = P0>>1 & 0x08; ID2 = P0>>3 & 0x04; ID1 = P0>>5 & 0x02; ID0 = P0_7;
//TIMER1_ISR //INT0_ISR - 34 -
ID = ID7|ID6|ID5|ID4|ID3|ID2|ID1|ID0; //将模数转换出来的值变成一个8位数 FI = ID * 4.78; //转换求出所求的电压 NI = FI; OE = 0; P0 = 0XFF; displaydata_I(); if(NI<100||NI>210) P1_2=1; }
void main(void) {
ENB = 0; OE = 0; Inittimer(); inputcom(0x80); displaychar(\ while(1) { if(P1_0==0) { delay(500); ZhengZ(); } if(P1_1==0) { delay(500); FanZ(); } if(P1_3==0) { delay(500); SpeedUp(); } if(P1_5==0) { delay(500); SlowDown(); }
- 35 -
if(P1_7==0) { delay(500); STOP(); } } }
驱动程序清单:
#include
void ZhengZ(void) {
IN3 = 0; IN4 = 1; EX0 = 1; FLAG_DIS = 0; init1602() ; inputcom(0x80); displaychar(\ }
void FanZ(void) {
IN3 = 1; IN4 = 0; EX0 = 1; FLAG_DIS = 0; init1602(); inputcom(0x80); displaychar(\ }
void STOP(void) {
IN3 = 1; IN4 = 1;
//正转处理 \//反转处理 \//急停 - 36 -