单片机课程设计指导书 精品Word下载.docx

上传人:b****3 文档编号:18010212 上传时间:2022-12-12 格式:DOCX 页数:35 大小:239.29KB
下载 相关 举报
单片机课程设计指导书 精品Word下载.docx_第1页
第1页 / 共35页
单片机课程设计指导书 精品Word下载.docx_第2页
第2页 / 共35页
单片机课程设计指导书 精品Word下载.docx_第3页
第3页 / 共35页
单片机课程设计指导书 精品Word下载.docx_第4页
第4页 / 共35页
单片机课程设计指导书 精品Word下载.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

单片机课程设计指导书 精品Word下载.docx

《单片机课程设计指导书 精品Word下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计指导书 精品Word下载.docx(35页珍藏版)》请在冰豆网上搜索。

单片机课程设计指导书 精品Word下载.docx

//闹钟输出

bitdisp_sd;

//数码管闪动显示标志位

bitdisp_ms;

//数码管显示时间/闹钟标志位

bitdisp_sdt;

//数码管闪动间隔反转标志位

unsignedcharcodeled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//数字0-9的编码

unsignedchartime_cc,timer_cc;

//调时计数器

unsignedcharcount0,count1,second,minit,hour;

//时间时分秒

unsignedcharsecond1,minit1,hour1;

//闹钟时分秒

voiddelay(void)

{

unsignedinti;

for(i=0;

i<

100;

i++);

}

voiddisplay(void)

if(disp_ms==0)

{

if(disp_sd==0)

{

P0=led[hour/10];

P2=0x7F;

delay();

P2=0xFF;

P0=led[hour%10];

P2=0xBF;

P0=0x40;

P2=0xDF;

P0=led[minit/10];

P2=0xEF;

P0=led[minit%10];

P2=0xF7;

P2=0xFB;

P0=led[second/10];

P2=0xFD;

P0=led[second%10];

P2=0xFE;

}

else

if(time_cc==0x01)

{

if(disp_sdt==1)

P0=led[hour/10];

else

P0=0x00;

P2=0x7F;

delay();

P2=0xFF;

P0=led[hour%10];

P2=0xBF;

}

else

P0=led[hour/10];

P0=led[hour%10];

P0=0x40;

P2=0xDF;

if(time_cc==0x02)

P0=led[minit/10];

P2=0xEF;

P0=led[minit%10];

P2=0xF7;

P0=led[minit/10];

P0=led[minit%10];

P2=0xFB;

if(time_cc==0x03)

P0=led[second/10];

P2=0xFD;

P0=led[second%10];

P2=0xFE;

P0=led[second/10];

P0=led[second%10];

}

else

P0=led[hour1/10];

P0=led[hour1%10];

P0=led[minit1/10];

P0=led[minit1%10];

P0=led[second1/10];

P0=led[second1%10];

if(timer_cc==0x01)

P0=led[hour1/10];

P0=led[hour1%10];

P0=led[hour1/10];

P0=led[hour1%10];

if(timer_cc==0x02)

P0=led[minit1/10];

P0=led[minit1%10];

P0=led[minit1/10];

P0=led[minit1%10];

if(timer_cc==0x03)

P0=led[second1/10];

P0=led[second1%10];

P0=led[second1/10];

P0=led[second1%10];

}

voidkey_scan(void)

if(time==0)

for(i=0;

10;

i++)

display();

if(time==0)

{

TR0=0;

do

display();

while(time==0);

disp_sd=1;

disp_ms=0;

time_cc++;

if(time_cc==4)

TR0=1;

time_cc=0;

disp_sd=0;

if(timer==0)

display();

if(timer==0)

while(timer==0);

//数码管闪动显示

disp_ms=1;

//显示模式为闹钟时间

timer_cc++;

if(timer_cc==4)

timer_cc=0;

//闪动关闭

disp_ms=0;

//切换到时间模式

if(add==0)

}

if(add==0)

while(add==0);

if(disp_ms==0)

switch(time_cc)

{

case(0x01):

{hour++;

if(hour>

23)hour=23;

break;

case(0x02):

{minit++;

if(minit>

59)minit=59;

case(0x03):

{second++;

if(second>

59)second=59;

default:

}

switch(timer_cc)

{if(hour1==23)hour1=23;

elsehour1++;

{if(minit1==59)minit1=59;

elseminit1++;

{if(second1==59)second1=59;

elsesecond1++;

break;

if(dec==0)

if(dec==0)

while(dec==0);

{if(hour==0)hour=0;

elsehour--;

{if(minit==0)minit=0;

elseminit--;

{if(second==0)second=0;

elsesecond--;

{if(hour1==0)hour1=0;

elsehour1--;

{if(minit1==0)minit1=0;

elseminit1--;

{if(second1==0)second1=0;

elsesecond1--;

voidtimer_alam(void)

if((disp_ms==0)&

&

(disp_sd==0))//正常运行时间的状态下

if((hour1==hour)&

(minit1==minit))

speaker=disp_sdt;

//******************************主函数*************************************************

voidmain(void)

second=0x00;

//时间初始化为12:

00:

00

minit=0x00;

hour=12;

count0=0x00;

count1=0x00;

P1=0xFF;

TMOD=0x11;

TL0=tl;

TH0=th;

TL1=tl;

TH1=th;

EA=1;

ET0=1;

ET1=1;

TR0=1;

TR1=1;

while

(1)

key_scan();

timer_alam();

//*********************************中断服务函数**************************************

voidtime0_int(void)interrupt1

count0++;

if(count0==20)

count0=0;

second++;

if(second==60)

second=0;

minit++;

if(minit==60)

minit=0;

hour++;

if(hour==24)

hour=0;

voidtime1_int(void)interrupt3

TR1=1;

count1++;

if(count1==10)

count1=0;

disp_sdt=~disp_sdt;

}

7、硬件实现

选题二:

温度控制器的设计

主要实现功能:

通过温度传感器采集温度,与设定的上限和下限温度进行比较,当超出上下限时则报警并对应的指示灯亮,否则不报警,灯全灭。

具体要求:

1.报警器显示部分:

当前温度显示(1位小数),温度上限显示,温度下限显示(整数),通过按键三者切换显示

2.用DS16B20采集温度

3.温度上限和下限可以通过按键调整

4.当温度超过上限或者下限时报警器鸣叫,对应的超上限或下限灯点亮。

用DS16B20采集温度,STC89C52芯片P2.0—P2.3口控制数码管选通,P0口输出数值显示。

P3.5口输出电平驱动蜂鸣器做报警用,P2.4口和P2.7口控制两个发光二极管,代表温度超上限和查下限。

4、硬件电路图(protel99软件绘制)和仿真图(proteus软件与keil软件联调)

Protues图

Protel图

5.软件设计

reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

sbits2=P1^1;

sbits3=P1^2;

sbits4=P1^3;

sbitled1=P2^0;

sbitled2=P2^1;

sbitled3=P2^2;

sbitled4=P2^3;

sbitdot=P0^7;

sbitbebe=P3^5;

sbitbaowen=P2^4;

sbitjiawen=P2^7;

#definetime0x8E

ucharcodedis[]={0x3F,0X06,0X5b,0X4f,

0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0X63,0X39,0X01,0X08};

//共阴数码管"

0-9"

"

灭"

-"

编码

ucharsav1,fav1,bai,qin,f2,tval,tge,

tshi,tbai,mak,HTEMP,LTEMP,va1,mge,mshi,

fge,fshi,temp_high,temp_low,set1,set2;

uintfinal_temp;

uinttvalue;

uchartflag;

//温度正负标志

sbitDQ=P3^4;

voiddelayMs(uinta);

voidtimeset();

voidsetdsplay2();

voiddelayus(ucharx)

while(x--);

voiddelay_long(uintx)

uinti;

while(x--)

125;

{}

//延时1ms子程序

voiddelay(uintz)

uintx,y;

for(x=z;

z>

0;

z--)

for(y=80;

y>

y--);

//***********************************************************************

/******************************ds1820程序***************************/

voiddelay_18B20(unsignedinti)//延时1微秒

while(i--);

voidds1820rst()/*ds1820复位*/

{unsignedcharx=0;

DQ=1;

//DQ复位

delay_18B20(4);

//延时

DQ=0;

//DQ拉低

delay_18B20(70);

//精确延时大于480us

//拉高

delay_18B20(40);

}

uchards1820rd()/*读数据*/

{unsignedchari=0;

unsignedchardat=0;

for(i=8;

i>

i--)

{DQ=0;

//给

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1