版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一闪烁的Led
C1
U1
rHk-19・39
220p>XTAL1P0.0/AD0"^38
P0.1/AD1
X1:37
P0.2/AD2
CRYSTAL18・36
C2XTAL2P0.3/AD3
・35
P0.4/AD4
34
P0.5/AD5
TF:33
220p.R1P0.6/AD6
9"・32
RSTP0.7/AD7
10k
・21
P2.0/A8
・22
C3P2.1/A9
・23
P2.2/A10
29■・24
PSENP2.3/A11
30^♦25
ALEP2.4/A12
后■26
EAP2.5/A13
327
P2.6/A14
■28
D1P2.7/A15
1■■10
P1.0P3.0/RXD
220RP1.1P3.1/TXD■7T
LED-RED■J2
VP1.2P3.2/INT0■~I3
P1.3P3.3/INT1■74
P1.4P3.4/T0
P1.5P3.5/T1
P1.6P3.6/WRHE
P1.7P3.7/RD■77
AT89C51
〃名称:闪烁的Led
〃说明:Led按设定的时间间隔闪烁,约亮1秒灭1秒
//
#include<reg51.h>
#defineucharunsignedchar//uchar宏定义
ttdefineuintunsignedint〃uint宏定义
sbitled=PlA0;
//
〃延时子程序
//
voiddelayMs(uintx)
(
uchari;//uchari取值为0-255
while(x-)
for(i=0;i<120;i++);〃延时120微妙
//
〃主程序
//------------------------------------
voidmain()
(
while(l)
(
led=~led;
delayMs(2050);〃约亮1秒灭1秒
}
实验二从左到右的流水灯
C1T
U1
的
XTAL1PO.O/ADO
IPO.VAD1
C2TPO2/AD2
XTAL2PO3AD3
P0.4/AD4
P05/A05
I2B2OPHPO.6.'AD6
TRSTPO.7/AD7
W
匐
ALE
EA
老
P3.aRXO
罟P31,JXD
P3.2.1RT6
曾P3.3/1NY7
P34To
系P3.5T1
P3.&WR
P3.7TO
〃名称:从左到右的流水灯
〃说明:接在P0端口的8只Led从左到右循环依次点亮,产生走马灯效果
//------------------------------------
#include<reg52.h>
#include<intrins.h>〃循环左移头文件宏定义
#defineucharunsignedchar
#defineuintunsignedint
//
〃延时函数
voiddelayMs(uintx)
(
uchari;
while(x-)
for(i=0;i<l20;i++);
//-------------
〃主程序
voidmain()
PO=Oxfe;〃PO口初始化值1111.1110
while(l)
PO=_crol_(PO,l);//PO口循环左移1位
delayMs(15O);〃晶振为11.0592时,0.1594885秒移动一次
)
实验三左右来回循环的流水灯
U1
►XTAL1PO.Q'ADO
P0.1/AD1
PO2AD2
XTAL2PO3AD3
PO.4ACM
PO.&AD5
P0.6/AD6
RSTP0.7/AD7
P2.a,A8
P2.t/A9
P22A10
P2.WA11
P24Al2
P2.5'A13
P26A14
P2.7.A15
P3.0/RXD
P3.1/TXD
P3.2.'1NTO
P33,WH
P34,-T0
P3&-T1
P3.6WR
P3.7TO
〃名称:左右来回循环的流水灯
〃说明:程序利用循环移位函数一crol_和一cror形成来回滚动的效果
//
#include<reg52.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
//
voiddelayMs(uintx)
(
uchari;
while(x-)
for(i=0;i<120;i++);
)
//--------------
voidmain()
uchari;
P2=OxOl;〃P2端口初始化
while(l)〃死循环
(
for(i=0;i<7;i++)//i自加1,当i=7时执行第二个for语句
(
P2=_crol_(P2,l);〃P2端口循环左移1位
delayMs(150);
)
for(i=0;i<7;i++)
(
P2=_cror_(P2,l);//P2端口循环右移1位
delayMs(150);
)
)
)
〃注释for(i=0;i<7;i++).i初始值为0,
〃i++就是i自加1,每加一次执行
〃P2=_crol_(P2,l);〃P2端口循环左移1位
〃delayMs(150);延时
〃当i=7时,跳出第一个for语句,
〃执行第二个for语句
实验四花样流水灯
U1
>XTAL1PO.aADO
P0.1/AD1
P0.2/AD2
XTAL2P03AD3
P0.4/AD4
P0.5*AD5
P0.6.'AD6
RSTP0.7/AO7
P2QA8
P21-A9
P2.2/A10
PSENP2.3/A11
AL£P2.4AI2
EAP2S/A13
P26rAi4
P2.7/A15
P3.0.RXD
P3.1/TXD
P3.2/WTO
P33557T
P3.4/TO
P3.5'T1
P3.6WR
P3.7/RD
〃名称:花样流水灯
〃说明:16只LED分两段组按预设的多种花样变换显示
//--------------------------------------
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodepattern_PO[]={Oxfc,Oxf7,Ox5f};//>^5<PO
ucharcodepattern_P2[]={0xff,0x07,0xf5};〃定义P2显示数组
〃调整数组。里的内容,可以实现自定义的花样显示
//----------------------------------------
voiddelayMs(uintx)
(
uchari;
while(x--)for(i=0;i<120;i++);
)
//----------------------------------------
voidmain()
(
uchari;
while(l)
|
for(i=0;i<7;i++)
(
PO=pattern_PO[i];//i自加1次,PO数组重新扫描1次
P2=pattern_P2[i];//i自加1次,P2数组重新扫描1次
delayMs(150);
)
)
)
〃数组定义格式为
//ucharcodepattern_P0[]={0xfc,0xf7};
〃uhar为数组类型,pattern_PO数组名称
//code数组存储类型
〃{0xfc,0xf7}为数组显示参数,为Oxff为全部关闭
实验五Led模拟交通灯
//Led模拟交通灯
〃说明:东西向绿灯亮若干秒,黄灯闪烁,闪烁5秒后亮红灯,
〃红灯亮后,南北向有红灯变为绿灯,若干秒后南北向黄灯闪烁,
〃闪烁5次后,亮红灯,东西向绿灯亮,如此重复
//---------------------------------------------------
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitred_a=POAO;
sbityellow_a=POAl;
sbitgreen__a=P0A2;
sbitred_b=P0A3;
sbityellow_b=P0A4;
sbitgreen_b=P0A5;//sbit为LED控制位定义
ucharFlash_Count=0,Operation_Type=l;
//Flash_Count闪烁次数和Operation_Type操作类型变量定义
//
voiddelayMs(uintx)
(
uchari;
while(x-)
(
for(i=0;i<120;i++);
)
}
//
〃交通灯切换子程序
voidTraffic_Light()
(
switch(Operation_Type)
(
case1:〃东西向绿灯亮与南北向红灯亮
red_a=l;yellow_a=l;green_a=0;
red_b=0;yellow_b=l;green_b=l;
delayMs(2000);
Operation_Type=2;
break;
case2:〃东西向黄灯开始闪烁,绿灯关闭
delayMs(300);
yellow_a=!yellow_a;green_a=l;
〃黄灯闪烁5次
if(++Flash_Count!=10)return;
Flash_Count=0;
Operation_Type=3;
break;
case3:〃东西向红灯与南北向绿灯亮
red_a=0;yellow_a=l;green_a=l;
red_b=l;yellow_b=l;green_b=0;
delayMs(2000);
Operation_Type=4;
break;〃中断case3执行case4
case4:〃南北向黄灯开始闪烁
delayMs(300);
yellow_b=!yellow_b;green_b=l;
if(++Flash_Count!=10)return;
Flash_Count=0;
Operation_Type=l;
}
)
//
voidmain()
(
while(l)Traffic_Light();
)
//switch是多分支选择语句常用格式
“switch(表达式)
//{case常量表达式1;语句1
//case常量表达式2;语句2
//case常量表达式3;语句3
//case常量表达式n;语句n
“default:语句n+1}
“return是返回值,break的返回是指停止这•次执行,返回开始
实验六单只数码管循环显示0-9
RP1
RESPACK-8
C1
HFU1
220p19
►XTAL1P0.0/AD0
OX1■38
P0.1/AD1
■37
P0.2/AD2
C2—r-CRYSTA%-36
XTAl_2P0.3/AD3
■35
P0.4/AD4
■34
P0.5/AD5
220pR1■33
P0.6/AD6为2
9"-
RSTP0.7/AD7
10k1
-
»2互
P2.0/A82
±-C3-
P2.1/A93
髭-
P2.2/A104
-
刊卜-PSENP2.3/A11互5
10u-
6
ALEP2.4/A12必
-
EAP2.5/A137
匿-
P2.6/A148
--
P2.7/A15
W1O
T
2P1.0P3.0/RXD-
3P1.1P3.1/TXD2
-
4P1.2pa.a/ihrro五3
-
5P3.3/INTT
P1.3黑4
-
6P1.4P3.4/T05
7〒-
P1.5P3.5/T16
8五-
P1.67
P36亚-
P1.7P3.7/RD
AT89C51
〃单只数码管循环显示0-9
〃说明:主程序中的循环语句反复将0-9的段码送至P0端口
//使数字0-9循环显示
//
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY_CODE[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,Oxff};
〃。内为共阳数码管0-9的编码
//
voidDelayMs(uintx)
(
uchari;
while(x--)for(i=0;i<120;i++);
)
//
voidmain()
uchari=0;
PO=OxOO;
while(l)
(
PO=~DSY_CODE[i];〃显示数组取反
i=(i+l)%10;//
DelayMs(180);
〃说明;电路中数码管接法是共阴,段码表是共阳的
〃;所以用PO=Y~DS_CODE[i]语句取反显示
实验七8只数码管滚动显示单个不同数字
XTAL1PO.OiADO
PO.1/AD1
PO2AD2
XTAL2P03/AD3
P0.4/AD4
PO.5'AD5
PO.6,AD6
RSTPO.7/AD7
P2.O/AB
P2.1/A9
P22A1O
P23A11
P24Al2
P2sAi3
P26Al4
P2.7/A15
P3.0/RXD
P3.trrxp
P、一L,
P3.3/INT7
P3.4.1D
P35rH
P3.aWR
P3.7TO
AT89C51
用三极管驱动显示不正常,最好去掉三级管驱动
/咫只数码管滚动显示单个不同数字
〃说明:数码管从左到右依次滚动显示0-9,
〃程序通过每次仅循环选通一只数码管
//
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY_CODE[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,};〃数组定义
//
voidDelayMs(uintx)
uchari;
while(x-)
(
for(i=0;i<200;i++);
}
}
//------------------------------------
voidmain()
(
uchari,k;
k=0x80;//K初始化1000.0000
while(l)
(
for(i=0;i<10;i++)
(
PO=Oxff;〃关闭显示
PO=DSY_CODE[i];〃发送数字段码
k=_crol_(k,l);〃P2=k;所以第1位右移
P2=k;〃发送数码管位码,打开对应的数码管
DelayMs(300);
}
//i=10是因为数组里有1-9共十个段码
〃k=0x80;因为移位P2八8开始,移动一位才开始
〃显示第一位
实验八8只数码管显示多个不同字符
rm
XTAL1PO.O/ADO
X1■38P01
oP0.VAD1
।CRYSP02AD2
C2■36P03
XTAL2P0.3'AD3
P0.4/AD4
P0.5/AD5
P0.&AD6
RSTPO.7/AD7
P9
2.Z11/A0
P2,&A11
PSENP24A12
P2,A13
P2,s,A14
P2.6'A15
P2.7,,A1
P1QP3GRXD
PliP3.VTXD
P12P32标
P13P3.3.iRTl
P1.4P34F)
PtSP3.5TH
PI6P3.6匹
Pl7P37,'WO
IR只数码管显示多个不同字符
〃说明:数码管动态显示0-7,(刷新快)
//---------------------------------------
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY_CODE[]=
{0xc0,0xf9,0xa4/0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0xff};〃数码管段码数组定义
//
〃延时程序
voidDelayMs(uintx)
(
uchari;
while(x-)for(i=0;i<120;i++);
)
//
〃主程序
//
voidmain()
uchark,m=0x80;〃赋初值
while(l)
for(k=0;k<8;k++)
(
m=_crol_(m,l);〃位右移
P2=m;〃位码
PO=DSY_CODE[k+l];〃段码
DelayMs(10);〃延时短
〃本例刷新速度快!视觉显示多个字符
〃如果延时间加长,就是固定位置显示单个字符
实验九数码管闪烁显示字符串
ABCDEFGDP512345678
0W
po
AD1
po.V2AD2
po
3AD黑3
po⑷
po⑸湛
2御R1
po向
------------------F7
10kpo
±rC3poP2Q/A8
P2.1/A9
P2.2/A10
PSENP23XA11
10uALEP2.4/A12
EAP25仇13
P2.&AJ4
P2.7/A15
R3.GRXD
P3.1.TXD
P32,WT0
P3.3WF7
P3.4/TD
P3.5'T1
P3.6WR
P37,«D
〃数码管闪烁显示字符串
〃说明:数码管闪烁显示由0-7构成的一串数字
//本例用动态刷新发法显示一串字符,在停止时所有数字显示消失(区别定义两个数组)
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
〃数字0-9的数码管段码表
ucharcodeDSYCODE[]=
{0xc0,0xf9/0xa4/0xb0,0x99,0x92/
0x82,0xf8,0x80,0x90};
〃数码管位选通索引表(位码表)
ucharcodeDSY_IDX[]=
{0x01,0x02,0x04,0x08,//
0x10,0x20,0x40,0x80};
//
〃延时程序
//
voidDelayMs(uintx)
(
uchari;
while(x-)for(i=0;i<120;i++);
}
//
〃主程序
H
voidmain()
(
uchark,m;〃赋初值
PO=Oxff;//PO初始化
P2=0x00;//P2初始化
while(l)
{for(k=0;k<30;k++)
(
for(m=0;m<8;m++)
(
P2=DSY」DX[m];〃显示位码
PO=DSY_CODE[m];〃显示段码
De!ayMs(20);
)
)
P2=0x00;〃位关闭
DelayMs(lOOO);
)
)
〃第一-个for(k=0;k<30;k++)数码管保持显示时间延时
〃第二个for(m=0;m<8;m++)位码和段码显示位限制
实验十8只数码管滚动显示数字串
E89
12345B78
83933883
C1
T卜Sxi
,39叩.0
220PXTAL1PO.O,ADO
PO」
PO1/AD1
・37叩N
[CRYSTALP02AD2
C2-9p3
XTAL2PO.3'AD0
P0.&AD4
・:MP0上
P0.&AD6
22即R1)3
P0.6/AD6:;,P07
1P0.7-AD7
±-C3P2QA8
P2VA9
・2302
P2.2-A10
・.Z03
PSENP2.3/A11
・253
ALEP2.4/A12
・2605
P2.&A13
Q6
P2.6/AI4:s
zsQ7
P2.7/A15蚩
P3.0/RXD
P3.1.<TXDzi
P3-2.NTOzi
P33/WTT
P3.4/TO
P3.5E
P3.6WR
P3.7W
AT89C51
"8只数码管滚动显示数字串
〃说明:数码管向左滚动显示3个字符构成的字符串
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY_CODE[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,Oxff};
〃程序将下面数组看成环形队列显示从
〃某个数开始的8个数(10表示黑屏)
ucharNum[]={10,10,10,10,10,10
,10,10,2,8,9};
//
voidDelayMs(uintx)
(
uchari;
while(x-)for(i=0;i<120;i++);
)
//
voidmain()
uchari,j,k,m;
PO=Oxff;
P2=0x00;
m=0x80;
while(l)
for(i=0;i<10;i++)〃显示保持
for(j=0;j<8;j++)
m=_crol_(m,l);
P2=m;
〃采用环形取法从第K开始取J个
PO=DSY_CODE[Num[(k+j)%ll]];
DelayMs(2);
)
〃环形队列首指针K递增,Num的下表范围为
/A)-10因此对■11求余
k=(k+l)%ll;
)
〃在用软件仿真是最好不要加三极管驱动!因程序运行占用CPU资源,运行不正常
实验1K1-K4控制LEd移位
C1
U1
■39DID1D1D9
220p__|_LXTAL1PO.O/ADO
・%"D2
X1P0.1/AD1
口■37~D3
C2CRYSTALP02AD2
18■36,DTD2D2D1
XTAL2P0.3/ADG
P0.4.AD4远
■34~D6~
HF-P0.5/AD5D3D3
■33~D7~D11
2丝R1_P0.6/AD6
■32
―RSTP0.7.'AD7
10k
D9jD4D4D1
P2QA8
士C3・22DIO
P2.1;A9
・23D”
P2.2/A10
29・临D12D5D5D1
H产PSENP2.3,A11
・:;士
ALEP2.4/A12
31・•冬D14
EAP2HAi3
・Z7D15D6D6
P26A14
■讶D16
P2.7/A15
07D7D1.吗.
P1.0P3O/RXD
Pi1P3.VTXD
L下移.P1.2P3.2/WTO
P13P3.3.'WTT
4P1.4P3.4/T0220R
6・
R上机P1.5P3.5F
7"
P16P3.&WR
P1.7P3.7而
AT89C51
〃名称:K1-K4控制LEd移位
〃说明:按下kl时,P0端口LED向上移动一位
〃说明:按下k2时,P0端口LED向下移动一位
〃说明:按下k3时,P2端口LED向上移动一位
〃说明:按下k4时,P2端口LED向下移动一位
//
#include<reg51.h>
#include<intrins.h>
ttdefineucharunsignedchar
#defineuintunsignedint
H
voidDelayMs(uintx)
(
uchari;
while(x-)
(
for(i=:0;i<120;i++);
)
}
//
〃根据Pl端口的按键移动LED
voidmove_LED()
(
if((Pl&OxlO)==O)PO=_cror_(PO,l);//kl键PO左移
elseif((Pl&0x20)==0)P0=_crol_(P0,l);//k2键PO右移
elseif((Pl&0x40)==0)P2=_cror_(P2,l);//k3键P2左移
elseif((Pl&0x80)==0)P2=_crol_(P2,l);//k4键P2右移
}
//Pl端口值初始化为1,有建按下对应键值为0
〃对应键值PO、P2的Led移位
//
voidmain()
(
ucharRecent_key;
PO=Oxfe;
Pl=Oxff;
P2=0xfe;
Recent_key=Oxff;〃按键初始化为高电平
while(l)
(
if(Recent_key!=Pl)〃判断是否有键按下
{
Recent_key=Pl;〃保存最近按键值
move_LED();〃根据P1端口的按键移动LED
DelayMs(lO);
)
}
)
〃调整延时值,可改变流水灯流动速度
实验十二K1-K4按键状态显示
C1
U1
小D1R2
220p■39
>XTAL1PO.O/ADO
■38
PO.1/AD1
口■37
C2P0.2/AD21^36
XTAI_2P0.3/AD3
dP0.4/AD4
P0.5/AD5
220PD3
R1P0.6/AD6
RSTP0.7/AD7220R
D4R5
-C3P2.0/A8
P2.1/A9220R
P2.2/A10
PSENP2.3/A11
ALE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘肃省天水市清水县多校联考2025-2026学年高二上学期1月期末考试地理试卷(含答案)
- 安徽省芜湖市无为市部分学校2025-2026学年八年级上学期1月期末考试物理答案
- 物理初二下册期末试卷及答案
- 文物学基础题库及答案
- 新部编版一年级语文上册第一次月考练习卷及答案(八套)
- 道德与法治四年级上册期末练习测试题及参考答案(综合题)
- 脸部按摩培训课件
- 2022人教版四年级上册数学期末测试卷附参考答案【培优a卷】
- 现代科技导论 教案
- 电气验收标准
- “党的二十届四中全会精神”专题题库及答案
- 2026届福建省宁德市三校高三上学期1月月考历史试题(含答案)
- 2026年冀教版初一地理上册期末真题试卷+解析及答案
- 2025年文化产业版权保护与运营手册
- 四川省乐山市高中高三上学期第一次调查研究考试数学试题【含答案详解】
- 物流行业运输司机安全驾驶与效率绩效评定表
- 2026年及未来5年市场数据中国脱硫市场运行态势及行业发展前景预测报告
- 中国农业科学院2026年度第一批统一公开招聘笔试考试参考试题及答案解析
- 饲料运输合同范本
- 厦门灌口中学2026届化学高二第一学期期末质量检测试题含答案
- 室外看台座椅安装施工方案
评论
0/150
提交评论