单片机课设资料汇总

上传人:今*** 文档编号:105649705 上传时间:2019-10-12 格式:DOCX 页数:29 大小:32KB
返回 下载 相关 举报
单片机课设资料汇总_第1页
第1页 / 共29页
单片机课设资料汇总_第2页
第2页 / 共29页
单片机课设资料汇总_第3页
第3页 / 共29页
单片机课设资料汇总_第4页
第4页 / 共29页
单片机课设资料汇总_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《单片机课设资料汇总》由会员分享,可在线阅读,更多相关《单片机课设资料汇总(29页珍藏版)》请在金锄头文库上搜索。

1、1. 控制程序放在AT89C51单片机中,在十字路口的四组红、黄、绿交通灯中,由单片机的P2.1、P2.2、P2.3、P2.4、P2.5、P2.6口控制,由于交通灯为发光二极管且阳极通过限流电阻和电源正极连接,因此I/O口输出高电平时,与之相连的相应指示灯会亮,并通过LED数码管显示时间倒计时,I/O输出低电平时,相应指示灯会灭2. 排阻,一般是接在51单片机的P0口,因为P0口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻。排阻就是好多电阻连载一起,他们有一个公共端 。1端为公共端接VCC或地以STC89C52为例,延时函数自己写#includesbit Beep=P10; /蜂鸣器接在

2、P1.0上,低电平驱动,电路图网上一搜一大堆void main(void) while(1) Beep=0; DELAY(500); /延时500ms 嘀的时间 Beep=1; DELAY(500); /延时500ms 不响的时间 #include #define uchar unsigned char#define uint unsigned intuchar data buf4;uchar data sec_dx=20; /东西数默认uchar data sec_nb=30; /南北默认值uchar data set_timedx=20; /设置东西方向的时间uchar data set_

3、timenb=30; /设置南北方向的时间int n;uchar data countt0;/定时器0中断次数/定义5组开关sbit k4=P37; /切换方向sbit k1=P35; /时间加sbit k2=P36; /时间减sbit k3=P34; /确认sbit k5=P31; /禁止sbit k6=P15; /夜间模式/ P32 /只允许东西方向通行,中断0/ P33 /只允许南北方向通行,中断1sbit Red_nb=P26; /南北红灯标志sbit Yellow_nb=P25; /南北黄灯标志sbit Green_nb=P24; /南北绿灯标志sbit Red_dx=P23; /东

4、西红灯标志sbit Yellow_dx=P22; /东西黄灯标志sbit Green_dx=P21; /东西绿灯标志sbit Buzz=P30;bit Buzzer_Indicate;bit set=0; /调时方向切换键标志 =1时,南北,=0时,东西bit dx_nb=0; /东西南北控制位bit shanruo=0;uchar code table11= /共阴极字型码0x3f, /-00x06, /-10x5b, /-20x4f, /-30x66, /-40x6d, /-50x7d, /-60x07, /-70x7f, /-80x6f, /-90x00 /-NULL;/函数的声明部分v

5、oid delay(int ms); /延时子程序void key(); /按键扫描子程序void key_to1(); /键处理子程序void key_to2();void key_to3();void display(); /显示子程序void logo(); /开机LOGOvoid Buzzer();/主程序void main()TMOD=0X11; /定时器设置TH0=0X3C; /定时器0置初值 0.05STL0=0XB0;EA=1; /开总中断ET0=1; /定时器0中断开启TR0=1; /启动定时0EX0=1; /开外部中断0EX1=1; /开外部中断1logo();P2=0Xc

6、3; / 开始默认状态,东西绿灯,南北黄灯sec_nb=sec_dx+5; /默认南北通行时间比东西多5秒while(1)key(); /调用按键扫描程序display(); /调用显示程序Buzzer();/函数的定义部分void key(void) /按键扫描子程序if(k1!=1) /当K1(时间加)按下时display(); /调用显示,用于延时消抖if(k1!=1)TR0=0; /关定时器shanruo=0;P2=0x00;if(set=0)set_timedx+; /南北加1Selseset_timenb+; /东西加1Sif(set_timenb=100)set_timenb=1

7、;if( set_timedx=100)set_timedx=1; /加到100置1sec_nb=set_timenb ; /设置的数值赋给东西南北sec_dx=set_timedx; /dodisplay();while(k1!=1);if(k2!=1) /当K2(时间减)按键按下时display(); /调用显示,用于延时消抖if(k2!=1)TR0=0; /关定时器shanruo=0;P2=0x00;if(set=0)set_timedx-; /南北减1Selseset_timenb-; /东西减1Sif(set_timenb=0)set_timenb=99;if( set_timedx

8、=0 )set_timedx=99; /减到1重置99sec_nb=set_timenb ; /设置的数值赋给东西南北sec_dx=set_timedx;dodisplay(); /调用显示,用于延时while(k2!=1);if(k3!=1) /当K3(确认)键按下时display(); /调用显示,用于延时消抖if(k3!=1)TR0=1; /启动定时器Buzzer_Indicate=0;sec_nb=set_timenb; /从中断回复,仍显示设置过的数值sec_dx=set_timedx; /显示设置过的时间if(set=0) /时间倒时到0时P2=0X00; /东西绿灯,南北红灯Gr

9、een_dx=1;Red_nb=1;sec_nb=sec_dx+5; /回到初值elseP2=0x00; /南北绿灯,东西红灯Green_nb=1;Red_dx=1;sec_dx=sec_nb+5;if(k4!=1) /当K4(切换)键按下display(); /调用显示,用于延时消抖if(k4!=1)TR0=0;set=!set; /取反set标志位,以切换调节方向dx_nb=set;dodisplay();while(k4!=1);if(k5!=1) /当K5(禁止)键按下时display(); /调用显示,用于延时消抖if(k5!=1)TR0=0; /关定时器P2=0x00;Red_dx

10、=1;Red_nb=1; /全部置红灯sec_dx=00; /四个方向的时间都为00sec_nb=00;Buzzer_Indicate=1;dodisplay();while(k5!=1);if(k6!=1) /当K6(夜间模式)按下display(); /调用显示,用于延时消抖if(k6!=1)TR0=0; /关定时器P2=0x00;Yellow_dx=1;Yellow_nb=1; /全部置黄灯sec_dx=00; /四个方向的时间都为00sec_nb=00;Buzzer_Indicate=1;dodisplay();while(k6!=1);void display(void) /显示子程

11、序buf1=sec_nb/10; /第1位 东西秒十位buf2=sec_nb%10; /第2位 东西秒个位buf3=sec_dx/10; /第3位 南北秒十位buf0=sec_dx%10; /第4位 南北秒个位P1=0xff; / 初始灯为灭的P0=0x00;P1=0xfe; /片选LED1P0=tablebuf1; /送东西时间十位的数码管编码delay(1); /延时P1=0xff; /关显示P0=0x00;P1=0xfd; /片选LED2P0=tablebuf2;delay(1);P1=0xff;P0=0x00;P1=0Xfb; /片选LED3P0=tablebuf3;delay(1);

12、P1=0xff;P0=0x00;P1=0Xf7;P0=tablebuf0; /片选LED4delay(1);void time0(void) interrupt 1 using 1 /定时中断子程序TH0=0X3C; /重赋初值TL0=0XB0;TR0=1; /重新启动定时器countt0+; /软件计数加1if(countt0=10)if(sec_nb=5)&(dx_nb=0)&(shanruo=1) /东西黄灯闪Green_dx=0;Yellow_dx=0;Buzz=0;if(sec_dx=5)&(dx_nb=1)&(shanruo=1) /南北黄灯闪Green_nb=0;Yellow_n

13、b=0;Buzz=0;if(countt0=20) / 定时器中断次数=20时(即1秒时) countt0=0; /清零计数器sec_dx-; /东西时间减1sec_nb-; /南北时间减1if(sec_nb=5)&(dx_nb=0)&(shanruo=1) /东西黄灯闪Green_dx=0;Yellow_dx=1;Buzz=1;if(sec_dx=5)&(dx_nb=1)&(shanruo=1) /南北黄灯闪Green_nb=0;Yellow_nb=1;Buzz=1;if(sec_dx=0&sec_nb=5) /当东西倒计时到0时,重置5秒,用于黄灯闪烁时间sec_dx=5;shanruo=1;if(sec_nb=0&sec_dx=5) /当南北倒计时到0时,重置5秒,用于黄灯闪烁时间sec_nb=5;shanruo=1;if(dx_nb=0&sec_nb=0) /当黄灯闪烁时间倒计时到0时,Buzz=1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号