单片机程序.docx
- 文档编号:14116791
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:29
- 大小:17.68KB
单片机程序.docx
《单片机程序.docx》由会员分享,可在线阅读,更多相关《单片机程序.docx(29页珍藏版)》请在冰点文库上搜索。
单片机程序
实验1:
#include"reg52.h"
sbitP23=P2^3;//定义LED指示灯的IO
voidmain()
{
inti;//计时变量
while
(1)
{
for(i=0;i<30000;i++);//延时
P23=!
P23;//指示灯IO口反转
}
}
实验2:
#include"reg52.h"
sbitP23=P2^3;//定义LED指示灯的IO口
sbitP20=P2^0;//定义key的IO口
voidmain()
{
inti;//计时变量
while
(1)
{
for(i=0;i<30000;i++);//延时
if(P20==0)P23=0;//按键,LED亮
elseP23=1;//LED亮
}
}
五.思考题
1.P23-P26口做输出口,接发光二极管,编写并调试程序,使其闪烁。
#include
sbitp1=P3^4;
sbitp2=P3^5;
sbitp3=P3^6;
sbitp4=P3^7;
sbitp14=P1^4;
voiddelay(unsignedchari);
voidmain()
{
p14=0;
while
(1)
{
p1=0;
p2=0;
p3=0;
p4=0;
delay(200);
p1=1;
p2=1;
p3=1;
p4=1;
delay(200);
}
}
voiddelay(unsignedchari)
{
unsignedcharj,k;
for(k=0;k
for(j=0;j<255;j++);
}
2.P23-P26口做输出口,接发光二极管,编写并调试跑马灯程序。
#include
sbitp1=P3^4;
sbitp2=P3^5;
sbitp3=P3^6;
sbitp4=P3^7;
sbitp14=P1^4;
inti;
voiddelay(unsignedchari);
voidmain()
{
p14=0;
while
(1)
{
p1=0;
delay(200);
p2=0;
delay(200);
p3=0;
delay(200);
p4=0;
delay(200);
p1=1;
delay(200);
p2=1;
delay(200);
p3=1;
delay(200);
p4=1;
delay(200);
}
}
voiddelay(unsignedchari)
{
unsignedcharj,k;
for(k=0;k
for(j=0;j<255;j++);
}
实验2
1.实验1
#include
sbitk1=P2^0;
sbitk2=P2^1;
voidmain()
{
while
(1)
{
if(k1==0&k2==0)
{
P2=0xf7;
}
if(k1==1&k2==0)
{
P2=0xef;
}
if(k1==0&k2==1)
{
P2=0xdf;
}
if(k1==1&k2==1)
{
P2=0xbf;
}
}
}
2.实验2
#include
sbitkey=P3^2;
unsignedchara;
unsignedcharcount=0;
voiddelay(inti)
{
while(i)
i--;
}
voidmain()
{
while
(1)
{
if(key==0)
{
delay(10);
if(key==0)
{
count++;
while(!
key);
if(count==16)
count=0;
a=count;
a=~a;
a=a<<3;
P2=a;
}
}
}
}
1.11.P23-P26口做输出口,接发光二极管,编写并调试程序,使其闪烁。
#include"reg51.h"
#include"stdio.h"
voidmain()
{inti;
P2=0x78;
for(;;)
{
for(i=0;i<30000;i++);
P2=~P2;
}
}
2.P23-P26口做输出口,接发光二极管,编写并调试跑马灯程序。
\
#include
voiddelay(unsignedchar);
voidmain()
{
inti;
chara;
while
(1)
{a=0xf7;
P2=a;
delay(200);
for(i=0;i<4;i++)
{
P2=a;
delay(200);
a=~a;
a<<=1;
a=~a;
}
a=0xdf;
for(i=0;i<4;i++)
{
P2=a;
delay(200);
a=~a;
a>>=1;
a=~a;
}
}
}
voiddelay(unsignedchari)
{unsignedcharj,k;
for(k=0;k
for(j=0;j<255;j++);
}
1.设计一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。
#include
sbitkey=P3^2;
unsignedchara;
unsignedcharcount=16;
voiddelay(inti)
{
while(i)
i--;
}
voidmain()
{
while
(1)
{
if(key==0)
{
delay(100);
if(key==0)
{
count--;
while(!
key);
if(count==0)
count=15;
a=count;
a=~a;
a=a<<3;
P2=a;
}
}
}
}
2.用1个按键控制LED的显示,要求显示3种以上的不同模式。
#include
voiddelay(unsignedchar);
voidaa();
voidbb();
voidcc();
sbitkey=P3^2;
unsignedcharcount=0;
voidmain()
{
while
(1)
{
if(key==0)
{
delay(10);
if(key==0)
{
count++;
while(!
key);
if(count==4)count=0;
}
}
switch(count)
{
case1:
aa();break;
case2:
bb();break;
case3:
cc();break;
}
}
}
voidaa()
{
inti;
chara;
{a=0xf7;
P2=a;
delay(200);
for(i=0;i<10;i++)
{
P2=a;
delay(200);
a=~a;
a<<=1;
a=~a;
}
a=0xdf;
for(i=0;i<10;i++)
{
P2=a;
delay(200);
a=~a;
a>>=1;
a=~a;
}
}
}
voiddelay(unsignedchari)
{unsignedcharj,k;
for(k=0;k
for(j=0;j<255;j++);
}
voidbb()
{intd;
P2=0x87;
for(d=0;d<3;d++)
{delay(200);
P2=~P2;}
}
voidcc()
{
P2=0xcf;
}
实验3
1.实验1
#include"reg52.h"
sbitP23=P2^3;
voidmain()
{
IT0=1;//外部中断0连沿触发方式
EX0=1;//使能外部中断0
EA=1;//开部中断
P23=0;//指示灯初始为亮
while
(1);
}
voidint0()interrupt0//外部中断0程序入口
{
P23=!
P23;
}
2.实验2
#include"reg52.h"
sbitP32=P3^2;
voidmain()
{
IT0=1;//外部中断0连沿触发方式
EX0=1;//使能外部中断0
EA=1;//开部中断
while
(1);
}
voidint0()interrupt0//外部中断0程序入口
{
staticunsignedcharBit=0;
Bit++;
if(Bit>=4)Bit=0;
switch(Bit)
{
case0:
P2=0xf7;break;
case1:
P2=0xef;break;
case2:
P2=0xdf;break;
case3:
P2=0xbf;break;
}
}
思考题
1.采用外部中断的方式实现一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。
#include
sbitkey=P3^2;
sbitP14=P1^4;
unsignedchara;
unsignedcharh=15;
voiddelay(unsignedinti)
{
unsignedintj,k;
for(j=0;j<=i;j++)
for(k=0;k<=255;k++);
}
voidmain()
{
P14=0;
IT0=1;
EX0=1;
EA=1;
while
(1);
}
voidint0()interrupt0
{
if(key==0)
{
delay(10);
if(key==0)
{
while(!
key);
if(h<0)h=15;
a=h;
a=~a<<4|0x0f;
P3=a;
h--;
}
}
}
2.采用外部中断的方式实现用1个按键控制LED的显示,要求显示3种以上的不同模式。
#include
sbitkey=P3^2;
sbitP14=P1^4;
voidaa();
voidbb();
voidcc();
voiddelay(unsignedchari);
unsignedcharcount=0;
voidmain()
{
P14=0;
IT0=1;
EA=1;
EX0=1;
PX0=0;
while
(1);
}
voidINT0_ISR()interrupt0
{
delay
(1);
if(key==0)
{
count++;
if(count==4)
count=0;
}
switch(count)
{
case1:
aa();break;
case2:
bb();break;
case3:
cc();break;
}
}
voidaa()
{
inti;
chara;
{
a=0xf7;
P2=a;
delay(200);
for(i=0;i<10;i++)
{
P2=a;
delay(200);
a=~a;
a<<=1;
a=~a;
}
a=0xdf;
for(i=0;i<10;i++)
{
P2=a;
delay(200);
a=~a;
a>>=1;
a=~a;
}
}
}
voidbb()
{intd;
P2=0x87;
for(d=0;d<3;d++)
{
delay(200);
P2=~P2;
}
}
voidcc()
{
P2=0xcf;
}
voiddelay(unsignedchari)
{
unsignedintj,k;
for(j=0;j<=i;j++)
for(k=0;k<=255;k++);
}
实验4
1.实验1
#include
#defineTHC00xee
#defineTLC00x00
sbitled0=P2^3;
voidmain()
{
TMOD=0x01;
TH0=THC0;
TL0=TLC0;
TR0=1;
ET0=1;
EA=1;
while
(1);
}
voidtimer0_ISR(void)interrupt1
{
staticunsignedcharcount=0;
TL0=TLC0;
TH0=THC0;
count++;
if(count>=200)
{
count=0;
led0=!
led0;
}
}
2.实验2
#include
#defineTHC00xee
#defineTLC00x00
sbitled0=P2^3;
sbitled1=P2^4;
sbitled2=P2^5;
sbitled3=P2^6;
voidmain()
{
TMOD=0x01;
TL0=TLC0;
TH0=THC0;
TR0=1;
ET0=1;
EA=1;
while
(1);
}
voidtimer0_ISR(void)interrupt1
{
staticunsignedcharcount=0,Bit=0;
TL0=TLC0;
TH0=THC0;
count++;
if(count>=200)
{
count=0;
Bit++;
if(Bit>=4)
Bit=0;
P2=P2|0x78;
switch(Bit)
{
case0:
led0=0;break;
case1:
led1=0;break;
case2:
led2=0;break;
case3:
led3=0;break;
}
}
}
五、思考题
1.设计1个秒计数器,每秒计1次数,在LED上显示出来,计至16清零后重新计数。
#include
#defineTHC00xee
#defineTLC00x00
sbitp14=P1^4;
voidmain()
{
p14=0;
TMOD=0x01;
TL0=TLC0;
TH0=THC0;
TR0=1;
ET0=1;
EA=1;
while
(1);
}
voidtimer0_ISR(void)interrupt1
{
staticunsignedcharcount=0,Bit=0;
TL0=TLC0;
TH0=THC0;
count++;
if(count>=200)
{
count=0;
if(Bit>=16)
Bit=0;
P3=((~Bit)<<4)|0x0f;
Bit++;
}
}
2.在上题基础上用按键控制秒计数器的启停,按一次键开始计数,按2次停止计数,按3次又开始计数…。
#include
#defineTHC00xee
#defineTLC00x00
voiddelay(unsignedchari);
sbitp14=P1^4;
sbitkey=P3^4;
voidmain()
{
p14=0;
TMOD=0x01;
TL0=TLC0;
TH0=THC0;
TR0=0;
ET0=1;
EA=1;
IT0=1;
EX0=1;
PX0=1;
while
(1);
}
voidtimer0_ISR(void)interrupt1
{
staticunsignedcharcount=0,Bit=0;
TL0=TLC0;
TH0=THC0;
count++;
if(count>=200)
{
count=0;
if(Bit>=16)
Bit=0;
P3=((~Bit)<<4)|0x0f;
Bit++;
}
}
voidINT0_ISR()interrupt0
{
delay(10);
if(key==0)
TR0=~TR0;
}
voiddelay(unsignedchari)
{
unsignedintj,k;
for(j=0;j<=i;j++)
for(k=0;k<=255;k++);
}
实验5
1.在一个数码管上显示字符“1”。
#include"reg52.h"
#defineTHCO0xee
#defineTLCO0x0
unsignedcharcodeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsignedcharData_Buffer[4]={1,2,3,4};
sbitP24=P2^4;
sbitP25=P2^5;
sbitP26=P2^6;
sbitP27=P2^7;
sbitP14=P1^4;
voidmain()
{
P14=0;
TMOD=0x11;
TH0=THCO;
TL0=TLCO;
TR0=1;
ET0=1;
EA=1;
while
(1);
}
voidtimer0()interrupt1
{
P2|=0xf0;
TH0=THCO;
TL0=TLCO;
P24=0;
P0=Duan[1];
}
2.在4个数码管上显示字符“1”、“2”、“3”、“4”。
#include"reg52.h"
#defineTHCO0xee
#defineTLCO0x0
unsignedcharcodeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsignedcharData_Buffer[4]={1,2,3,4};
sbitP24=P2^4;
sbitP25=P2^5;
sbitP26=P2^6;
sbitP27=P2^7;
sbitP14=P1^4;
voidmain()
{
P14=1;
TMOD=0x11;
TH0=THCO;
TL0=TLCO;
TR0=1;
ET0=1;
EA=1;
while
(1);
}
voidtimer0()interrupt1
{
staticunsignedcharBit=0;
TH0=THCO;
TL0=TLCO;
Bit++;
if(Bit>=4)Bit=0;
P2|=0xf0;
P0=Duan[Data_Buffer[Bit]];
switch(Bit)
{
case0:
P24=0;break;
case1:
P25=0;break;
case2:
P26=0;break;
case3:
P27=0;break;
}
}
3.设计一个2位10进制计数器,每秒加1,在LED上显示。
voidmain()
{
P14=0;
TMOD=0x11;
TH0=THCO;
TL0=TLCO;
TR0=1;
ET0=1;
EA=1;
TH1=THC1;
TL1=TLC1;
TR1=1;
ET1=1;
while
(1);
}
voidtimer0()interrupt1
{
staticunsignedcharBit1=0;
TH0=THCO;
TL0=TLCO;
Bit1++;
if(Bit1>=2)
Bit1=0;
P2=0xff;
P0=Duan[Data_Buffer[Bit1]];
switch(Bit1)
{
case0:
P24=0;break;
case1:
P25=0;break;
}
}
voidtimer1()interrupt3
{
staticunsignedcharBit;
unsignedcharcount=0;
TH1=THC1;
TL1=TLC1;
count++;
if(count>200)
{
count=0;
Bit++;
if(Bit>99)
Bit=0;
Data_Buffer[0]=Bit/10;
Data_Buffer[1]=B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 程序