程序.doc

基于51单片机的模路灯系统设计

收藏

资源目录
跳过导航链接。
基于51单片机的模路灯系统设计.zip
1-c程序
程序.doc---(点击预览)
ADC.h
AT24C02.h
Data.h
Ds1302.h
Key.h
Lcd.h
stc12c5a60s2.h
程序.c
程序.hex
程序.lnp
程序.LST
程序.M51
程序.OBJ
程序.opt.bak
程序.plg
程序.Uv2.bak
程序.uvopt
程序.uvproj
程序_Opt.Bak
程序_Uv2.Bak
程序_uvopt.bak
10-程序流程图
2-原理图
原理图.pdf---(点击预览)
原理图.docx---(点击预览)
99se
Backup of 原理图.Sch
Previous Backup of 原理图.Sch
原理图.Bkp
原理图.ddb
3-视频讲解
操作视频.txt---(点击预览)
单片机最小系统电路相关知识.docx---(点击预览)
96-路灯控系统原理图讲解.wmv
Thumbs.db
最小系统介绍.wmv
4-相关软件下载和教程
5-开题报告
6-实物照片
7-制作详解
1602液晶
DC电源插口
三极管
上拉排阻
人体感应模块
供电方式
各种电阻、贴片、可调电阻焊接方法
自锁开关
轻触按键
8-元件清单
压缩包内文档预览:(预览前20页/共33页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:36648409    类型:共享资源    大小:48.16MB    格式:ZIP    上传时间:2020-01-03 上传人:遗**** IP属地:湖北
25
积分
关 键 词:
基于 51 单片机 路灯 系统 设计
资源描述:
基于51单片机的模路灯系统设计,基于,51,单片机,路灯,系统,设计
内容简介:
/宏定义#define uchar unsigned char#define uint unsigned int/头函数#include #include #include #include #include #include #include #include /热释电传感器sbit RR=P37;/是否有人状态 光强显示uchar R=1,L=0;/读取光强uint GQ=0;/循环uint XH=0;/开机时分秒uchar OS=0,OF=0,OM=0;/关机时分秒uchar ClS=0,ClF=0,ClM=0;/模式uchar Mode=0;/调整位光标uchar Modes=0;/键盘uchar K=0;/PWM脉冲占空比调节void pwm_set(uchar a);/PWM初始化void initpwm();/光强读取并显示void GQ_();/主函数void main()/PWM脉冲initpwm();/初始化pwm_set(0x00);/屏幕初始化Init_LCD();/时钟初始化Ds1302_Init();/ADC初始化InitADC();/EEPROM初始化initeeprom();/时钟初始化/Ds1302_Write_Time();/写/*delay_LCD(20);write_add(0x01,OS);delay_LCD(20);write_add(0x02,OF);delay_LCD(20);write_add(0x03,OM);delay_LCD(20);write_add(0x04,ClS);delay_LCD(20);write_add(0x05,ClF);delay_LCD(20);write_add(0x06,ClM);*/读delay_LCD(20);OS=read_add(0x01);delay_LCD(20);OF=read_add(0x02);delay_LCD(20);OM=read_add(0x03);delay_LCD(20);ClS=read_add(0x04);delay_LCD(20);ClF=read_add(0x05);delay_LCD(20);ClM=read_add(0x06);/读取时间while(1)/人体判断if(RR=1)R=1;elseR=0;/光强读取并显示XH+;if(XH=10)GQ_();XH=0;/读取时间Ds1302_Read_Time();/判断是否开启if(time_buf14=OS&time_buf15=OF&time_buf16=OM)Mode=1;else if(time_buf14=ClS&time_buf15=ClF&time_buf16=ClM)Mode=0;/开机状态下控制LEDif(Mode=1&R=1)/PWM控制LEDpwm_set(GQ);else/PWM控制LEDpwm_set(0x00);/时间及状态显示LCD_Write_Time(time_buf1,R,L,Mode);/键盘函数返回键值K=Key();/时间调整if(K=3)K=0;/PWM控制LEDpwm_set(0x00);write_com(0x0F);write_com(0x80+0x40+7);Modes=0;/不为跳出while(Modes!=6)/键盘函数返回键值K=Key();/光标移动if(K=3)Modes+;/光标switch(Modes)/秒case 0:write_com(0x80+0x40+7);break;/分case 1:write_com(0x80+0x40+4);break;/时case 2:write_com(0x80+0x40+1);break;/年case 3:write_com(0x80+3);break;/月case 4:write_com(0x80+6);break;/日case 5:write_com(0x80+9);break;/时间+else if(K=1)/相应+switch(Modes)/秒+case 0:time_buf16+;if(time_buf16=60)time_buf16=0;break;/分+case 1:time_buf15+;if(time_buf15=60)time_buf15=0;break;/时+case 2:time_buf14+;if(time_buf14=24)time_buf14=0;break;/年+case 3:time_buf11+;if(time_buf11=100)time_buf11=0;break;/月+case 4:time_buf12+;if(time_buf12=13)time_buf12=1;break;/日+case 5:time_buf13+;if(time_buf13=YDay(time_buf11,time_buf12)+1)time_buf13=1;break;/星期更新time_buf17=Conver_week(time_buf11,time_buf12,time_buf13);/时间及状态显示LCD_Write_Time(time_buf1,R,L,Mode);/光标switch(Modes)/秒case 0:write_com(0x80+0x40+7);break;/分case 1:write_com(0x80+0x40+4);break;/时case 2:write_com(0x80+0x40+1);break;/年case 3:write_com(0x80+3);break;/月case 4:write_com(0x80+6);break;/日case 5:write_com(0x80+9);break;/时间-else if(K=2)/相应-switch(Modes)/秒-case 0:time_buf16-;if(time_buf16=60)time_buf16=59;break;/分-case 1:time_buf15-;if(time_buf15=60)time_buf15=59;break;/时-case 2:time_buf14-;if(time_buf14=24)time_buf14=23;break;/年-case 3:time_buf11-;if(time_buf11=100)time_buf11=99;break;/月-case 4:time_buf12-;if(time_buf12=0|time_buf12=13)time_buf12=12;break;/日-case 5:time_buf13-;if(time_buf13=0|time_buf12=32)time_buf13=YDay(time_buf11,time_buf12);break;/星期更新time_buf17=Conver_week(time_buf11,time_buf12,time_buf13);/时间及状态显示LCD_Write_Time(time_buf1,R,L,Mode);/光标switch(Modes)/秒case 0:write_com(0x80+0x40+7);break;/分case 1:write_com(0x80+0x40+4);break;/时case 2:write_com(0x80+0x40+1);break;/年case 3:write_com(0x80+3);break;/月case 4:write_com(0x80+6);break;/日case 5:write_com(0x80+9);break;/初始化Init_LCD();/写时间Ds1302_Write_Time();/显示LCD_Write_Time(time_buf1,R,L,Mode);/时间调整OVER/开启时间调整else if(K=4)/开启时间显示Init_LCD_ONTime();Modes=0;/显示LCD_time(OS,OF,OM);write_com(0x0f);write_com(0x80+0x40+11);while(Modes!=3)/键盘函数返回键值K=Key();if(K=4)Modes+;/秒if(Modes=0)write_com(0x80+0x40+11);/分else if(Modes=1)write_com(0x80+0x40+8);/时else if(Modes=2)write_com(0x80+0x40+5);/+else if(K=1)/秒+if(Modes=0)OM+;if(OM=60)OM=0;/分+else if(Modes=1)OF+;if(OF=60)OF=0;/时+else if(Modes=2)OS+;if(OS=24)OS=0;/显示LCD_time(OS,OF,OM);/秒if(Modes=0)write_com(0x80+0x40+11);/分else if(Modes=1)write_com(0x80+0x40+8);/时else if(Modes=2)write_com(0x80+0x40+5);/-else if(K=2)/秒-if(Modes=0)OM-;if(OM=60)OM=59;/分-else if(Modes=1)OF-;if(OF=60)OF=59;/时-else if(Modes=2)OS-;if(OS=24)OS=23;/显示LCD_time(OS,OF,OM);/秒if(Modes=0)write_com(0x80+0x40+11);/分else if(Modes=1)write_com(0x80+0x40+8);/时else if(Modes=2)write_com(0x80+0x40+5);delay_LCD(80);write_add(0x01,OS);delay_LCD(80);write_add(0x02,OF);delay_LCD(80);write_add(0x03,OM);delay_LCD(80);write_add(0x04,ClS);delay_LCD(80);write_add(0x05,ClF);delay_LCD(80);write_add(0x06,ClM);Init_LCD();/开启时间调整/关闭时间调整else if(K=5)/关机时间Init_LCD_OFFTime();Modes=0;/显示LCD_time(ClS,ClF,ClM);write_com(0x0f);write_com(0x80+0x40+11);while(Modes!=3)/键盘函数返回键值K=Key();if(K=5)Modes+;/秒if(Modes=0)write_com(0x80+0x40+11);/分else if(Modes=1)write_com(0x80+0x40+8);/时else if(Modes=2)write_com(0x80+0x40+5);/+else if(K=1)/秒+if(Modes=0)ClM+;if(ClM=60)ClM=0;/分+else if(Modes=1)ClF+;if(ClF=60)ClF=0;/时+else if(Modes=2)ClS+;if(ClS=24)ClS=0;/显示LCD_time(ClS,ClF,ClM);/秒if(Modes=0)write_com(0x80+0x40+11);/分else if(Modes=1)write_com(0x80+0x40+8);/时else if(Modes=2)write_com(0x80+0x40+5);/-else if(K=2)/秒-if(Modes=0)ClM-;if(ClM=60)ClM=59;/分-else if(Modes=1)ClF-;if(ClF=60)ClF=59;/时-else if(Modes=2)ClS-;if(ClS=24)ClS=23;/显示LCD_time(ClS,ClF,ClM);/秒if(Modes=0)write_com(0x80+0x40+11);/分else if(Modes=1)write_com(0x80+0x40+8);/时else if(Modes=2)write_com(0x80+0x40+5);delay_LCD(80);write_add(0x01,OS);delay_LCD(80);write_add(0x02,OF);delay_LCD(80);write_add(0x03,OM);delay_LCD(80);write_add(0x04,ClS);delay_LCD(80);write_add(0x05,ClF);delay_LCD(80);write_add(0x06,ClM);Init_LCD();/关闭时间调整/while end/光强读取并显示void GQ_()uchar i=0;/读取光强GQ=0;for(i=0;i=130)GQ=100;L=3;else if(GQ=70&GQ50&GQ0;x-)for(y=600;y0;y-);/LCD写命令void write_com(uchar com)rs=0;lcden=0;P0=com;delay_LCD(1);lcden=1;delay_LCD(1);lcden=0;/LCD写数据void write_date(uchar date)rs=1;lcden=0;P0=date;delay_LCD(1);lcden=1;delay_LCD(1);lcden=0;/自定义字符集void Lcd_ram() uint i,j,k=0,temp=0x40; for(i=0;i5;i+) for(j=0;j8;j+) write_com(temp+j); write_date(HZk); k+; temp=temp+8;/处理在LCD上显示两位/add屏幕的位置,date数据,h行void write_sfm(uchar add,uchar date,uchar h)uchar shi,ge;shi=date/10;ge=date%10;if(h=1)write_com(0x80+add);elsewrite_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);/星期显示void Data_XS(uchar Data)uchar num;write_com(0x80+13);for(num=0;num3;num+)/write_date(Data_tableDatanum);/ 显示时间 人体检测 光强显示 关机/开机void LCD_Write_Time(uchar *Data,uchar R,uchar L,uchar Mode)write_sfm(0,Data0,1); /写年write_sfm(2,Data1,1);write_sfm(5,Data2,1); /写月write_sfm(8,Data3,1);/写日write_sfm(0,Data4,2); /写时write_sfm(3,Data5,2); /写分write_sfm(6,Data6,2);/写秒Data_XS(Data7); /写星期/光强write_com(0x80+0x40+10);write_date(0+L);/检测是否有人if(R=1)write_com(0x80+0x40+12);write_date(4);else write_com(0x80+0x40+12);write_date( );/关机if(Mode=0)write_com(0x80+0x40+13);write_date(O);write_date(F);write_date(F);/开机else if(Mode=1)write_com(0x80+0x40+13);write_date(O);write_date(N);write_date( );/显示时间void LCD_time(uchar S,uchar F,uchar M)write_sfm(4,S,2); /写时write_sfm(7,F,2); /写分write_sfm(10,M,2);/写秒/初始化void Init_LCD()uchar num;lcden=0;/自定义字体Lcd_ram();/屏幕初始化write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);/时间write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_date(table0num);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table1num);/年write_com(0x80+4);write_date(0x00);/月write_com(0x80+7);write_date(0x01);/日write_com(0x80+10);write_date(0x02);/光强write_com(0x80+0x40+9);write_date(0x03);/开机时间void Init_LCD_ONTime()uchar num;lcden=0;/屏幕初始化write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);delay_LCD(5);/时间write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_date(table2num);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table3num);/关机时间void Init_LCD_OFFTime()uchar num;lcden=0;/屏幕初始化write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);delay_LCD(5);/时间write_com(0x01);write_com(0x80);for(num=0;num16;num+)write_date(table4num);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table5num);/DS1302相关内容的定义与声明/管脚定义sbit SCK=P20;sbit SDA=P21;sbit RST=P22;/复位脚#define RST_CLRRST=0/电平置低#define RST_SETRST=1/电平置高/双向数据#define IO_CLRSDA=0/电平置低#define IO_SETSDA=1/电平置高#define IO_RSDA /电平读取/时钟信号#define SCK_CLRSCK=0/时钟信号#define SCK_SETSCK=1/电平置高#define ds1302_sec_add0x80/秒数据地址#define ds1302_min_add0x82/分数据地址#define ds1302_hr_add0x84/时数据地址#define ds1302_date_add0x86/日数据地址#define ds1302_month_add0x88/月数据地址#define ds1302_day_add0x8a/星期数据地址#define ds1302_year_add0x8c/年数据地址#define ds1302_control_add0x8e/控制数据地址#define ds1302_charger_add0x90 #define ds1302_clkburst_add0xbeextern unsigned char time_buf18;/空年月日时分秒周extern unsigned char time_buf8 ;/空年月日时分秒周unsigned char time_buf18 = 20,11,2,22,00,00,00,2;/空年月日时分秒周unsigned char time_buf8 ; /空年月日时分秒周/*- 向DS1302写入一字节数据-*/void Ds1302_Write_Byte(unsigned char addr, unsigned char d)unsigned char i;RST_SET;/写入目标地址:addraddr = addr & 0xFE; /最低位置零for (i = 0; i 1;/写入数据:dfor (i = 0; i 1;RST_CLR;/停止DS1302总线/*- 从DS1302读出一字节数据-*/unsigned char Ds1302_Read_Byte(unsigned char addr) unsigned char i;unsigned char temp;RST_SET;/写入目标地址:addraddr = addr | 0x01;/最低位置高for (i = 0; i 1;/输出数据:tempfor (i = 0; i 1;if (IO_R) temp |= 0x80;else temp &= 0x7F;SCK_SET;SCK_CLR;RST_CLR;/停止DS1302总线return temp;/*- 向DS1302写入时钟数据-*/void Ds1302_Write_Time(void) unsigned char i,tmp;for(i=1;i8;i+) /BCD处理tmp=time_buf1i/10;time_bufi=time_buf1i%10;time_bufi=time_bufi+tmp*16; Ds1302_Write_Byte(ds1302_control_add,0x00);/关闭写保护 Ds1302_Write_Byte(ds1302_sec_add,0x80);/暂停 /Ds1302_Write_Byte(ds1302_charger_add,0xa9);/涓流充电 Ds1302_Write_Byte(ds1302_year_add,time_buf1);/年 Ds1302_Write_Byte(ds1302_month_add,time_buf2);/月 Ds1302_Write_Byte(ds1302_date_add,time_buf3);/日 Ds1302_Write_Byte(ds1302_day_add,time_buf7);/周 Ds1302_Write_Byte(ds1302_hr_add,time_buf4);/时 Ds1302_Write_Byte(ds1302_min_add,time_buf5);/分Ds1302_Write_Byte(ds1302_sec_add,time_buf6);/秒Ds1302_Write_Byte(ds1302_day_add,time_buf7);/周 Ds1302_Write_Byte(ds1302_control_add,0x80);/打开写保护 /*- 从DS1302读出时钟数据-*/void Ds1302_Read_Time(void) unsigned char i,tmp;time_buf1=Ds1302_Read_Byte(ds1302_year_add);/年 time_buf2=Ds1302_Read_Byte(ds1302_month_add);/月 time_buf3=Ds1302_Read_Byte(ds1302_date_add);/日 time_buf4=Ds1302_Read_Byte(ds1302_hr_add);/时 time_buf5=Ds1302_Read_Byte(ds1302_min_add);/分 time_buf6=(Ds1302_Read_Byte(ds1302_sec_add)&0x7F;/秒 time_buf7=Ds1302_Read_Byte(ds1302_day_add);/周 for(i=1;i8;i+) /BCD处理tmp=time_bufi/16;time_buf1i=time_bufi%16;time_buf1i=time_buf1i+tmp*10; /*- DS1302初始化-*/void Ds1302_Init(void)RST_CLR;/RST脚置低SCK_CLR;/SCK脚置低 Ds1302_Write_Byte(ds1302_sec_add,0x00); /*函数功能:输入BCD阳历数据,输出BCD星期数据(只允许1901-2099年)调用函数示例:Conver_week(c_sun,year_sun,month_sun,day_sun)如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世纪,c_sun=1为19世纪调用函数后,原有数据不变,读week得出阴历BCD数据*/code uchar table_week12=0,3,3,6,1,4,6,2,5,0,3,5; /月修正数据表/*算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期但如果是在闰年又不到3 月份上述之和要减一天再除7星期数为0*/uchar Conver_week(uchar year,uchar month,uchar day)/c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据 uchar p1,p2,week; year+=0x64; /如果为21世纪,年份数加100 p1=year/0x4; /所过闰年数只算1900年之后的 p2=year+p1; p2=p2%0x7; /为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据 p2=p2+day+table_weekmonth-1; if (year%0x4=0&month3)p2-=1; week=p2%0x7;return week;/EEPROMsbit sda=P24;sbit scl=P25;void delayEE() uchar i; i=10; while(i-);void start() /开始信号sda=1;delayEE();scl=1;delayEE();sda=0;delayEE();void stop() /停止sda=0;delayEE();scl=1;delayEE();sda=1;delayEE();void respons() /应答uint i;scl=1;delayEE();while(sda=1)&(i250*5)i+;scl=0;delayEE();void initeeprom()sda=1;delayEE();scl=1;delayEE();void write_byte(uchar date)uchar i,temp;temp=date;for(i=0;i8;i+)temp=temp1;scl=0; delayEE();sda=CY;delayEE();scl=1;delayEE();/scl=0; / delay();scl=0;delayEE();sda=1;delayEE();uchar read_byte()uchar i,k;scl=0;delayEE();sda=1;delayEE();for(i=0;i8;i+)scl=1;delayEE();k=(k0;x-)for(y=100;y0;y-)for(m=10;m0;m-);/键盘函数返回键值uchar Key()if(s1=0) /如果s1按下delay_K(10); /延时消抖while(s1=0);/等待松手return 1;else if(s2=0) /如果s2按下delay_K(10); /延时消抖while(s2=0);/等待松手return 2;else if(s3=0) /如果s3按下delay_K(10); /延时消抖while(s3=0);/等待松手return 3;else if(s4=0) /如果s4按下delay_K(10); /延时消抖while(s4=0);/等待松手return 4;else if(s5=0) /如果s5按下delay_K(10); /延时消抖while(s5=0);/等待松手return 5;return 0;ABCDDCBAP1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78REST9P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WR16P3.7/RD17XTAL218XTAL119GND20P2.021P2.122P2.223P2.324P2.425P2.526P2.728SPEN29ALE30EA31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC40P2.627U1STC5A60S212345678910111213141516U216PIN123456789R110KGND+5+5GNDGND+5GND+5A01A12A23GND4SDA5SCL6WP7VCC8U3AT24C02VCC21X12X23GND4CE5I/O6SCLK7VCC18U4DS1302+5GNDGNDY112MHZY232.768KHZGND+5BT1BATTERYGNDR310kR410kR510kR610kR710k+5S1SW-PBS2SW-PBS3SW-PBS4SW-PBS5SW-PBGNDC130PC230PGND+C310ufR810k+5R9103R121KA1K2D1LEDR13GMGND+5Q1ss8550123U6RSDGND+5R110KR21.5KGND321P1POWER+5112233445566S1GND+5Print to PDF without this message by purchasing novaPDF (/)单片机最小系统的相关知识单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。下面给出一个51单片机的最小系统电路图。 复位电路:一、复位电路的用途:单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。单片机复位电路如下图: 二、复位电路的工作原理在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2US就可以实现,那这个过程是如何实现的呢?在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。开机的时候为什么会复位:在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。也就是说在单片机启动的0.1S内,电容两端的电压时在03.5V增加。这个时候10K电阻两端的电压为从51.5V减少(串联电路各处电压之和为总电压)。所以在0.1S内,RST引脚所接收到的电压是5V1.5V。在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。按键按下的时候为什么会复位:在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。晶振电路:晶振电路:晶振是晶体振荡器的简称 在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络 电工学上这个网络有两个谐振点 以频率的高低分其中较低的频率是串联谐振 较高的频率是并联谐振 由于晶体自身的特性致使这两个频率的距离相当的接近 在这个极窄的频率范围内 晶振等效为一个电感 所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路 这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路 由于晶振等效为电感的频率范围很窄 所以即使其他元件的参数变化很大 这个振荡器的频率也不会有很大的变化晶振有一个重要的参数 那就是负载电容值 选择与负载电容值相等的并联电容 就可以得到晶振标称的谐振频率一般的晶振振荡电路都是在一个反相放大器(注意是放大器不是反相器)的两端接入晶振 再有两个电容分别接到晶振的两端 每个电容的另一端再接到地 这两个电容串联的容量值就应该等于负载电容 请注意一般IC的引脚都有等效输入电容 这个不能忽略一般的晶振的负载电容为15pF或12.5pF 如果再考虑元件引脚的等效输入电容 则两个22pF的电容构成晶振的振荡电路就是比较好的选择如上图:晶振是给单片机提供工作信号脉冲的 这个脉冲就是单片机的工作速度 比如 12M晶振 单片机工作速度就是每秒12M 当然单片机的工作频率是有范围的不能太大 一般24M就不上去了 不然不稳定晶振与单片机的脚XTAL0和脚XTAL1构成的振荡电路中会产生偕波(也就是不希望存在的其他频率的波) 这个波对电路的影响不大 但会降低电路的时钟振荡器的稳定性 为了电路的稳定性起见 ATMEL公司只是建议在晶振的两引脚处接入两个10pf-50pf的瓷片电容接地来削减偕波对电路的稳定性的影响 所以晶振所配的电容在10pf-50pf之间都可以的 没有什么计算公式P0口的上拉电阻:P0口作为I/O口输出的时候时输出低电平为0输出高电平为高组态(并非5V,相当于悬空状态)。也就是说P0口不能真正的输出高电平,给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。由于P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。1.一般51单片机的P0口在作为地址/数据复用时不接上拉电阻。2.作为一般的I/O口时用时,由于内部没有上拉电阻,故要接上上拉电阻!3.当p0口用来驱动PNP管子的时候,就不需要上拉电阻,因为此时的低电平有效;4.当P0口用来驱动NPN管子的时候,就需要上拉电阻的,因为此时只有当P0为1时候,才能够使后级端导通。31脚EA/Vpp接电源:STC89C51/52或其他51系列兼容单片机特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行,当接低电平时,复位后直接从外部ROM的0000H开始执行,这一点是初学者容易忽略的。附件1:毕业设计(论文)开题报告课题名称: 专业班级: 学生姓名: 学号: 指导教师: 教 研 室: 年月毕业设计(论文)开题报告题目:单片机路灯控制系统设计 专业:电子信息工程1选题的背景、意义现今,单片机的应用也进入到了环保节能领域中,使其应用发展更上一层楼。其中最为显著的就是装扮美丽城市夜景的路灯照明工程。我们都知道,路灯的用电是一个城市公共用电的突出问题,尤其是在深夜期间,车少人少的情况下,如何降低路灯用电,减少能耗,提高用电效率。智能路灯监控系统以单片机为核心,主要由现场系统、通讯系统、监护中心3部分组成。在引进此系统后,城市的公共用电得到的明显的改善。使用单片机来控制路灯有以下优点:(1) 能明显地降低控制器硬件成本。速度更快、功能更新的新一代微处理机不断涌现,硬件费用会变得很便宜。体积小、重量轻、耗能少是它们的共同优点。 (2) 可显著改善控制的可靠性。集成电路和大规模集成电路的平均无故障时大大长于分立元件电子电路。 (3) 硬件电路易标准化。在电路集成过程中采用了一些屏蔽措施,可以避免电力电子电路中过大的瞬态电流、电压引起的电磁干扰问题,因此可靠性比较高。 (4) 采用微处理机的数字控制,使信息的双向传递能力大大增强,容易和上位系统机联接,可随时改变控制参数。 (5) 可以设计适合于众多电力电子系统的统一硬件电路,其中软件可以模块化设计,拼装构成适用于各种应用对象的控制算法;以满足不同的用途。软件模块可以方便地增加、更改、删减,或者当实际系统变化时彻底更新。 (6) 提高了信息存贮、监控、诊断以及分级控制的能力,使伺服系统更趋于智能化。 (7) 随着微机芯片运算速度和存贮器容量的不断提高,性能优异但算法复杂的控制策略有了实现的基础 1-5。2相关研究的最新成果及动态目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: 1.在智能仪器仪表上的应用 用单片机改造原有的测量、控制仪器仪表,能促进仪表向数字化、智能化、多功能化、综合化、柔性化方向发展,解决了长期以来测量仪器仪表中的误差修正、线性化处理等难题。由单片机构成的智能仪表集测量、处理、控制功能于一体,赋予测量仪器以崭新的面貌,智能化仪表比传统仪表更加先进,更加完善。智能化仪表可以多种形式输出,在仪表外可接打印记录仪,指针式传统显示、发光管显示或CRT显示,形式灵活多变,具有传统仪表无法比拟的优点。2.在工业控制中的应用单片机已在工业过程控制、机床控制、机器人控制、汽车控制以及飞行器制导系统等方面得到广泛的应用。3.在家用电器中的应用现在的家用电器基本上都有单片机控制的踪影,大到电冰箱、洗衣机、电视机、电子游戏机,小到电子玩具、MP3、电子称量各种音响视屏器材,单片机无处不在。4.在计算机网络和通信领域中的应用网络,Internet的迅速发展给我们带来了一个崭新的时代,在这个时代中,单片机早已深深的融入我们每个人的生活之中。使单片机的体积小和Internet的应用广、传播快捷的特点结合起来,从而实现方便、低廉地将信息传送到几乎世界上每个地方。5.单片机在医用设备领域中的应用单片机在医用设备中的用途相当广泛,例如医用呼吸机、各种分析仪、监护仪、超声诊断设备及病床呼叫系统等等。6.在各种大型电器中的模块化应用某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。此外,单片机在工商,金融,科研,教育,国防航空航天等领域都有着十分广泛的用途。3课题的研究内容及拟采取的研究方法(技术路线)、研究难点及预期达到的目标3.1研究内容设计一套模拟路灯控制系统,能实现定时开关各单元路灯,并且能根据环境明暗变化,自动开关灯。通过计时系统来对时间进行有效的控制。当某个路灯发生故障,故障信号发送给主机,利用显示模块以及输入模块等作为人机界面,实现显示及声光报警等功能。系统设计包含硬件系统设计和软件系统设计。硬件系统包括:1)支路控制
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于51单片机的模路灯系统设计
链接地址:https://www.renrendoc.com/p-36648409.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!