51单片机的八个课程设计.docx
《51单片机的八个课程设计.docx》由会员分享,可在线阅读,更多相关《51单片机的八个课程设计.docx(82页珍藏版)》请在冰豆网上搜索。
51单片机的八个课程设计
Fjfh清华设计2009
11.
八路彩灯控制系统
八路彩灯控制系统八路彩灯控制系统
八路彩灯控制系统
设计要求
用89S52单片机构件建一个彩灯控制系统,系统用P1口外接8个发光二极管程序,
通电后所有彩灯亮,带复位,通过按钮实现彩灯的变化。
控制基本状态如下:
状态
状态状态
状态1:
:
:
:
控制系统通电或复位后,8个LED发光二极管依次从左向右开始逐个点亮,
间隔时间为0.2S
状态
状态状态
状态2:
:
:
:
8个LED发光二极管全亮后,从右向左LED发光二极管再逐个熄灭,间隔时
间仍为0.2S
状态
状态状态
状态3:
:
:
:
8个LED发光二极管全灭后,从左右两边开始同时点亮LED发光二极管,全
亮后,8个LED发光二极管再明暗一起闪烁2次,间隔时间仍为0.2s
#include
voiddelay();
voidmain()
{
chari,k=0xff;
unsignedcharj=0xff;//定义无符号j
P1=0xff;
TMOD=0x01;
delay();
for(i=0;i<8;i++)//从左到右点亮
{
P1=P1<<1;
delay();
}
for(i=0;i<8;i++)//从右到左熄灭
{
P1=(P1>>1)|0x80;
delay();
}
while(P1!
=0)//从两端点亮
{
j=j>>1;
k=k<<1;
P1=j&k;
delay();
}
for(i=0;i<4;i++)//闪烁
{Fjfh清华设计2009
2P1=~P1;
delay();
}
}
/*******************************************************************/
voiddelay()//延时
{
unsignedcharj;
intt;
for(t=4000;t>0;t--)
for(j=19;j>0;j--)
;
}
Fjfh清华设计2009
32.
心形闪烁彩灯
心形闪烁彩灯心形闪烁彩灯
心形闪烁彩灯
设计要求
单片机上电或复位后:
1、心形点亮;
2、箭形彩灯逐次点亮;
3、箭形彩灯点亮后心形闪烁两次重复以上内容。
#include
#include
#defineucharunsignedchar
sbitp1_0=P1^0;
sbitp1_1=P1^1;
sbitp1_2=P1^2;
ucharcount=0;
voiddelay(uchar);
/************************************************************************/
voidmain()
{
uchari,t=0xff;
P2=0xff;
p1_0=0;
while
(1)
{
p1_1=0;//点亮箭尾
delay
(1);
for(i=0;i<8;i++)//逐次点亮箭身
{
t=t<<1;
P2=t;
delay
(1);
}
p1_2=0;//点亮箭头
delay
(1);
for(i=0;i<6;i++)
{
p1_0=~p1_0;
delay
(1);
}
delay(5);
t=0xff;
P2=t;Fjfh清华设计2009
4p1_1=1;
p1_2=1;
delay
(1);
}
}
/************************************************************************/
voiddelay(uchark)//延时
{
unsignedcharj;
intt;
for(;k>0;k--)
{
for(t=4000;t>0;t--)
for(j=19;j>0;j--);
}
}
Fjfh清华设计2009
53
、
、、
、病房呼叫系统设计
病房呼叫系统设计病房呼叫系统设计
病房呼叫系统设计
设计要求
(1)设计一个可容64张床位的病房呼叫系统。
(2)要求每个床位都有一个按钮,当患者需要呼叫护士时,按下按钮。
此时护士值班室内
的呼叫系统板上显示该患者的床位号,并振铃3秒。
(3)当护士按下“响应”键时,取消当前呼叫。
#include
#include
#defineucharunsignedchar
sbitp3_0=P3^0;//显示扫描位1
sbitp3_1=P3^1;//显示扫描位2
sbitp3_7=P3^7;//响铃
voiddelay_50us(char);
voiddisplay(char);//显示程序
ucharscan_key1();//判断有无按键按下
ucharscan_key2();//键值判断
ucharn=0;
ucharcode
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0
xbf,0x7f,0xff};
/******************************************************************************
**************/
voidmain()
{
ucharkey_status=0;
ucharkey_value1,key_value2;
P1=0;
P3=0;
TMOD=0x01;//响铃中断设置
TH0=0xd8;
TL0=0xf0;
EA=1;//开cpu中断
ET0=1;//开定时器0中断
while
(1)//按键扫描程序
{
key_value1=scan_key1();
if(key_value1!
=0xff)
{
delay_50us(100);
key_value2=scan_key1();
if(key_value1==key_value2)Fjfh清华设计2009
6{
key_status=scan_key2();
P1=0;
TR0=1;
}
}
display(key_status);
}
}
/*****************************************************************************/
ucharscan_key1()//键盘扫描1确认有键按下
{uchartemp;
P2=0xff;
temp=P2;
returntemp;
}
/******************************************************************************
/
ucharscan_key2()//键盘扫描2定位
{
uchartemp1,i,j=0;
P1=0xfe;
for(i=0;i<8;i++)
{
temp1=P2;
P1=P1<<1|1;
if(temp1!
=0xff)break;
}
if(i==8)return0;
temp1=~temp1;
while(temp1!
=0)
{
temp1=temp1>>1;
j++;
}
temp1=i*8+j;
returntemp1;
}
/******************************************************************************
**/
voiddisplay(charx)//显示
{
uchard1,d2;Fjfh清华设计2009
7d1=x/10;
d2=x%10;
P0=table[d1];
p3_0=1;
delay_50us(100);
p3_0=0;
P0=table[d2];
p3_1=1;
delay_50us(100);
p3_1=0;
}
/******************************************************************************
**/
voiddelay_50us(chart)//延时5mst=100
{
ucharj;
for(;t>0;t--)
for(j=19;j>0;j--);
}
/******************************************************************************
****/
voidtimer0()interrupt1//响铃中断
{
p3_7=~p3_7;
TH0=0xd8;
TL0=0xf0;
n++;
if(n==150)
{
TR0=0;
}
}
Fjfh清华设计2009
8p1.0
p1.4
p1.5
p1.6
p1.7
p1.1
p1.2
p1.3p2.3
p2.4
p2.5
p2.6
p2.7
p2.2
p2.1
p2.0p1.0
p1.1
p1.2
p1.3
p1.4
p1.5
p1.6
p1.7
p2.0
p2.1
p2.2
p2.3
p2.4
p2.5
p2.6
p2.7a
b
c
d
f
g
dp
1
2a
b
c
d
e
f
g
dp
1
2ev
a
b
c
d
e
f
g
dp
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15U180C514
3
1112
56
1314
782
10
18
1516
211920222324
1
9
17
2526272829323130
3334353637383940
4142434445464748
4950515253545556
57585960616263642
3
4
5
6
7
8
9
1RP1RESPACK-8LS1SPEAKERQ12N1711R1100
Fjfh清华设计2009
94
44
4、
、、
、简易交通灯控制系统
简易交通灯控制系统简易交通灯控制系统
简易交通灯控制系统
设计要求
1、南北绿灯亮、东西红灯亮20秒;
2、时间到南北绿灯闪烁两次东西灯不变;
3、南北黃灯亮3秒东西灯不变;
4、南北红灯亮、东西绿灯亮20秒;
5、时间到东西绿灯闪烁两次南北灯不变;
6、东西黃灯亮3秒南北灯不变;
7、有随时应急按钮,此时南北东西红灯亮3秒用于紧急车辆通过;
8、重复1—6;
#include
#defineucharunsignedchar
sbitp1_1=P1^1;//南北绿灯
sbitp1_4=P1^4;//东西绿灯
sbitp3_0=P3^0;//led阴极1
sbitp3_1=P3^1;//led阴极2
voiddelay_50us(intt);
voiddisplay(uchar);
ucharx,i,k;
ucharcount1=0,count2=0;
ucharcode
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0
xbf,0x7f,0xff};
/******************************************************************************
***********/
voidmain()
{
ucharj;
TMOD=0x11;//设定定时器0和1工作模式1
TH0=0xd8;
TL0=0xf0;
TH1=25536/256;
TL1=25536%256;
EA=1;//中断设置定时器0和1
ET0=1;
ET1=1;
TR0=1;
TR1=1;
PT1=1;//定时器设置高优先级Fjfh清华设计2009
10EX0=1;//
外部中断0用于紧急中断
x=20;
while
(1)//循环工作
{
P1=0x35;
i=1;
display(x);
while(i);//南北绿灯东西红灯20秒
for(j=4;j>0;j--)//南北绿灯闪烁
{
p1_1=~p1_1;
delay_50us(1000);
}
k=1;
P1=0x33;
while(k);//南北黃灯3秒
P1=0x2e;
i=1;
while(i);//东西绿灯南北红灯20秒
for(j=4;j>0;j--)//东西绿灯闪烁
{
p1_4=~p1_4;
delay_50us(1000);
}
P1=0x1e;
k=1;
while(k);//东西黄灯3秒
}
}
/***************************************************************************/
voiddelay1s()interrupt1//定时器0红绿灯20秒延时每次进入延时10ms
{
TH0=0xd8;
TL0=0xf0;
count1++;
if(count1==100)
{
count2++;
count1=0;
x--;
display(x);
if(count2==20)
{
x=3;Fjfh清华设计2009
11i=0;
}
if(count2==23)
{
x=20;
count2=0;
k=0;
}
}
}
/******************************************************************************
/
voidtimer1()interrupt3//定时器1定时显示
{
display(x);
TH1=25536/256;
TL1=25536%256;
}
/******************************************************************************
*/
voiddisplay(ucharx)//显示程序
{
uchard1,d2;
d1=x/10;
d2=x%10;
P0=table[d1];
p3_0=1;
delay_50us(100);
p3_0=0;
P0=table[d2];
p3_1=1;
delay_50us(100);
p3_1=0;
}
/******************************************************************************
**/
voiddelay_50us(intt)//延时
{
ucharj;
for(;t>0;t--)
for(j=19;j>0;j--);
}
/******************************************************************************Fjfh清华设计2009
12**/
voidintx0()interrupt0//紧急中断3秒
{
uchartemp,temp1,c;
temp=P1;
temp1=x;
P1=0x36;
x=4;
for(c=3;c>0;c--)
{x--;
delay_50us(20000);
}
P1=temp;
x=temp1;
}
Fjfh清华设计2009
135
55
5、
、、
、单片机实现的洗衣机控制系统设计
单片机实现的洗衣机控制系统设计单片机实现的洗衣机控制系统设计
单片机实现的洗衣机控制系统设计
设计要求
(1).洗涤时间在0-60分钟内可由用户任意设定,并设置启动键,在预置定时时间后,按
启动键开始机器运转。
(2).洗衣机电机的工作顺序:
当设定好工作时间后,单片机控制洗衣机的电机按正转20
秒,停10秒,反转20秒,停10秒,正转20秒~~~~的规律运行
(3).用4个发光二极管LED模拟洗衣机的动作状态:
LED1~LED4右移循环点亮表示正
转,LED1~LED4左移循环点亮表示反转,LED1~LED4同时闪烁点亮表示暂停,全灭为
停止。
(4).用数码管显示洗涤时间,按倒计时方式对洗涤过程作计时显示,直到时间到停机,
并发出音响信号报警。
(5).设置停止键,在洗涤过程中随时按该键可终止动作,并使显示器清0。
#include
#defineucharunsignedchar
#defineuintunsignedint
sbiton=P1^0;
sbitrelay=P1^1;//继电器控制位决定正反转
sbitadd5=P1^2;//设时加5
sbitsub5=P1^3;//设时减5
sbitadd1=P1^4;//加1
sbitsub1=P1^5;//减肥
sbitstart=P1^6;//启动
sbitp2_0=P2^0;
sbitp2_1=P2^1;
sbitp2_2=P2^2;
sbitp2_3=P2^3;
sbitp2_4=P2^4;
sbitp2_5=P2^5;
sbitp2_6=P2^6;
sbitp2_7=P2^7;
sbitp3_2=P3^2;
sbitp3_6=P3^6;
ucharcode
table[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e
0x3f,0x7f,0xff};
ucharcode
table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
0xbf,0x7f,0xff};
/*************************************************************************//Fjfh清华设计2009
14//
函数声明
voiddisplay(ucharx,y);//显示程序
voiddelay_50us(uintt);//延时50us
voidkey_scan();//扫键程序
voidled20();//指示灯正转时循环点亮20秒
voidled_20();//指示灯反转时循环点亮20秒
voidled10();//指示灯停转闪烁10秒
voiddelay(uchark);
charx=0,y=0;
/******************************************************************************
*********/
voidmain()
{
uchari=1,s;
uchartemp;
TMOD=0x10;
EA=1;
EX0=1;
ET1=1;
PT1=1;
TH1=35536/256;
TL1=35536%256;
TR1=1;
P1=0xfc;
while(i)//等待时间设定
{if(P1==0xfc)
continue;
else
{
temp=P1;
delay_50us(1000);