自动化专业单片机课程设计.docx
- 文档编号:7637007
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:17
- 大小:17.24KB
自动化专业单片机课程设计.docx
《自动化专业单片机课程设计.docx》由会员分享,可在线阅读,更多相关《自动化专业单片机课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
自动化专业单片机课程设计
/***********************************************************************/
****电子信息与自动化学院自动化专业单片机课程设计****
/***彩灯移动实验****/
/***********************************************************************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#definetime500//点亮时间间隔
uintcont=1,n=7;
voidDelay(uintdel);//基本延时程序
voidAll_flash(uintk);//全部灯闪烁k次
voidfunction1();//基本功能
voidfunction2();//拓展功能
/********************************主函数*********************************/
voidmain()
{
EX0=1;//开外部中断0
IT0=1;//负边沿触发
EA=1;//开总中断
All_flash(3);
while
(1)
{
function1();
}
}
/********************************子函数*********************************/
voidDelay(uintdel)//延时del(ms)子函数
{
uinti,j;
for(i=0;i for(j=0;j<1940;j++); } voidAll_flash(uintk)//所有灯闪烁5次 { uinti; for(i=0;i { P0=0x00; Delay(500); P0=0xff; Delay(500); } } voidfunction1() { uinti; P0=0xff; Delay(time); while (1) { P0=0xfe;//功能18个灯依次点亮 Delay(time); for(i=0;i<7;i++) { P0=_irol_(P0,1); Delay(time); } P0=0x80;//功能28个灯依次熄灭 Delay(time); P0=0xc0; Delay(time); P0=0xe0; Delay(time); P0=0xf0; Delay(time); P0=0xf8; Delay(time); P0=0xfc; Delay(time); P0=0xfe; Delay(time); P0=0xff; Delay(time); All_flash (2);//功能3全亮全灭循环2次 P0=0x01;//功能4 Delay(time); for(i=0;i<7;i++) { P0=_crol_(P0,1); Delay(time); } P0=0x00;//功能5 Delay(time); P0=0x80; Delay(time); for(i=0;i<7;i++) { P0=_cror_(P0,1); Delay(time); } All_flash(3); } } voidfunction2() { uinti; n=7; P0=0x7f; Delay(time); while (1) { for(i=n;i>0;i--) { P0=_cror_(P0,1); Delay(time); } for(i=0;i { P0=_crol_(P0,1); Delay(time); } } } /********************************中断服务程序*********************************/ voidInterrupt0(void)interrupt0 { EX0=0; Delay(3); cont++; if(cont>=7)cont=1; switch(cont) { case1: {P0=0x7f;n=7;break;} case2: {P0=0x3f;n=6;break;} case3: {P0=0x1f;n=5;break;} case4: {P0=0x0f;n=4;break;} case5: {P0=0x07;n=3;break;} case6: {P0=0x03;n=2;break;} case7: {P0=0x01;n=1;break;} default: {P0=0xfe;n=7;} } EX0=1; } /***********************************************************************/ /***************************交通灯实验****************************/ /***********************************************************************/ #include #defineucharunsignedchar #defineuintunsignedint #definecont5//黄灯闪烁次数 #definetime5000//黄灯闪烁时间10s #definetime25000//救护车通过时间10s sbitKEY=P3^2;//救护车按键外中断0 sbitEWR=P0^0;//东西红灯EastWestRed缩写 sbitEWY=P0^2;//东西黄灯 sbitEWG=P0^4;//东西绿灯 sbitSNR=P0^1;//南北红灯SouthNorthRed缩写 sbitSNY=P0^3;//南北黄灯 sbitSNG=P0^5;//南北绿灯 voidflash();//南北黄灯闪烁cont次 voidEWY_flash();//东西黄灯闪烁cont次 voidDelay(uintdel);//延时del(ms)子函数 /********************************主函数*********************************/ voidmain() { EWR=0;//初始状态俩红灯亮 EWY=1; EWG=1; SNR=0; SNY=1; SNG=1; Delay(1000); EX0=1;//开外部中断0 IT0=1;//负边沿触发 EA=1;//开总中断 while (1) { EWR=1;//东西绿灯亮南北红灯亮 EWY=1; EWG=0; SNR=0; SNY=1; SNG=1; Delay(time);//延时10s EWG=1;//东西绿灯灭 flash();//东西黄灯闪烁 EWR=0;//东西红灯亮南北绿灯亮 EWY=1; EWG=1; SNR=1; SNY=1; SNG=0; Delay(time);//延时10s SNG=1;//东西绿灯灭 flash();//东西黄灯闪烁 } } /********************************子函数*********************************/ voidDelay(uintdel)//延时del(ms)子函数 { uinti,j; for(i=0;i for(j=0;j<1940;j++); } voidflash()//黄灯闪烁cont次 { uinti; EWR=1; EWY=1; EWG=1; SNR=1; SNY=1; SNG=1; for(i=0;i { EWY=0; SNY=0; Delay(1000); EWY=1; SNY=1; Delay(1000); } } /********************************中断服务程序*********************************/ voidInterrupt0(void)interrupt0 { uchartemp; EX0=0; temp=P0; Delay(3); EWR=0;//救护车到俩红灯亮 EWY=1; EWG=1; SNR=0; SNY=1; SNG=1; Delay(time2);//救护车通过时间 P0=temp; EX0=1; } /***********************************************************************/ /************************数码管显示实验**************************/ /***********************************************************************/ /***********************************************************************/ #include #defineucharunsignedchar #defineuintunsignedint codeucharduan[16]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71};//显示段码数码管字跟 ucharwei[4]={0x7f,0xbf,0xdf,0xef};//位的控制端 uintcont=1; uintq=0; uintb=0; uints=0; uintg=0; voiddelay(uchart); voiddisplay(); /************************************主函数***********************************/ voidmain() { IT0=1; IT1=1; EX0=1; EX1=1; EA=1; P0=0xfe; while (1) { display(); } } /**********************************子函数***********************************/ voiddelay(uchart) { uchari,j; for(i=0;i for(j=2122;j>0;j--); } voiddisplay()//显示函数 { if(q>16)q=0; if(b>16)b=0; if(s>16)s=0; if(g>16)g=0; P2=duan[q]; P1=wei[0]; delay(100); P2=duan[b]; P1=wei[1]; delay(100); P2=duan[s]; P1=wei[2]; delay(100); P2=duan[g]; P1=wei[3]; delay(100); } /********************************中断服务程序*********************************/ voidInterrupt0(void)interrupt0 { EX0=0; switch(cont) { case1: {g++;if(g>16)g=0;break;} case2: {s++;if(s>16)s=0;break;} case3: {b++;if(b>16)b=0;break;} case4: {q++;if(q>16)q=0;break;} default: g++; } EX0=1; } voidInterrupt1(void)interrupt2 { EX1=0; cont++; if(cont>4)cont=1; switch(cont) { case1: {P0=0xfe;break;} case2: {P0=0xfd;break;} case3: {P0=0xfb;break;} case4: {P0=0xf7;break;} default: P0=0xfe;; } EX1=1; } /****************************************************************************** ***********************************DS18B20************************************ ******************************************************************************/ #include #defineucharunsignedchar #defineuintunsignedint #definejump_ROM0xCC #definestart0x44 #defineread_EEROM0xBE #defineT4 unsignedcharcodeduan[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; ucharwei[4]={0x7f,0xbf,0xdf,0xef}; sbitDQ=P3^7;//DS18B20数据口 unsignedcharTMPH,TMPL; voiddelay(uintN) { inti; for(i=0;i } voiddelay_1() { inti,j; for(i=0;i<=10;i++) for(j=0;j<=2;j++); } voiddelay_2(uchart)//数码管显示 { uchari,j; for(i=0;i for(j=80;j>0;j--); } ucharReset(void)//复位DS18B20 { uchardeceive_ready; DQ=0; delay(29); DQ=1; delay(3); deceive_ready=DQ; delay(25); return(deceive_ready); } ucharread_bit(void)//从DS18B20读一个位值 { uchari; DQ=0; DQ=1; for(i=0;i<3;i++); return(DQ); } voidwrite_bit(ucharbitval)//向DS18B20写一位 { DQ=0; if(bitval==1) DQ=1; delay(5); DQ=1; } ucharread_byte(void)//从DS18B20读一个字节 { uchari,m,receive_data; m=1; receive_data=0; for(i=0;i<8;i++) { if(read_bit()) { receive_data=receive_data+(m< } delay(6); } return(receive_data); } voidwrite_byte(ucharval)//向DS18B20写一个字节 { uchari,temp; for(i=0;i<8;i++) { temp=val>>i; temp=temp&0x01; write_bit(temp); delay(5); } } voiddisplayz(unsignedintv) { unsignedchars,g; s=v%100/10; g=v%10; P2=duan[s]; P1=wei[0]; delay_2(100); P2=duan[g]; P1=wei[1]; delay_2(100); } voiddisplayx(unsignedintv) { unsignedchars,g; s=v%100/10; g=v%10; P2=duan[s]; P1=wei[2]; delay_2(100); P2=duan[g]; P1=wei[3]; delay_2(100); } voiddisplay(unsignedintv) { unsignedcharc,b,s,g; c=v/1000; b=v%1000/100; s=v%100/10; g=v%10; P1=0xff; P2=duan[c]; P1=wei[0]; delay_2(100); P1=0xff; P2=0xfe&duan[b]; P1=wei[1]; delay_2(100); P1=0xff; P2=duan[s]; P1=wei[2]; delay_2(100); P1=0xff; P2=duan[g]; P1=wei[3]; delay_2(100); } voidmain()//主函数 { floatt; uinttemp; while (1) { Reset(); write_byte(jump_ROM); write_byte(start); Reset(); write_byte(jump_ROM); write_byte(read_EEROM); TMPL=read_byte(); TMPH=read_byte(); temp=TMPH; temp<<=8; temp=temp|TMPL; t=temp*0.0625; temp=t*100; display(temp); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动化 专业 单片机 课程设计