广东海洋大学单片机实验全套.docx
- 文档编号:8772551
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:134.77KB
广东海洋大学单片机实验全套.docx
《广东海洋大学单片机实验全套.docx》由会员分享,可在线阅读,更多相关《广东海洋大学单片机实验全套.docx(21页珍藏版)》请在冰豆网上搜索。
广东海洋大学单片机实验全套
广东海洋大学
单
片
机
原
理
实
验
指
导
书
实验一发光二极管流水灯实验
一、实验目的:
1.通过AT89C51单片机控制8个发光二极管,八个发光二极管分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮。
开始时P0.0→P0.1→P0.7→P0.6→┅→P0.0,实现亮点以1HZ频率循环移动。
2.用PROTEUS设计,仿真以AT89C51为核心的发光二极管流水灯实验装置。
3.掌握发光二极管的控制方法。
二、PROTEUS电路设计:
三、实验仪器和设备
PC机、PROTEUS软件或W-A-51综合开发学习板
四、源程序设计:
根据电路图自行编写并调试。
#include
#include
#defineGPIO_LEDP0
voidDelay10ms(unsignedint);
voidmain(void)
{
unsignedcharn;
GPIO_LED=0xfe;//1111_1110->1111_1101
while
(1)
{
for(n=0;n<7;n++)
{
GPIO_LED=_crol_(GPIO_LED,1);
Delay10ms(50);
}
for(n=0;n<7;n++)
{
GPIO_LED=_cror_(GPIO_LED,1);
Delay10ms(50);
}
}
}
voidDelay10ms(unsignedintc)
{
unsignedchara,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
实验二开关控制LED数码管实验
一、实验目的:
1.通过AT89C51读入4位开关的输入状态(0~F),并将其输出到数码管显示。
2.掌握LED数码管的静态显示。
3.掌握I/O口的控制方法。
二、PROTEUS电路设计:
三、实验仪器和设备
PC机、PROTEUS软件或W-A-51综合开发学习板
四、源程序设计:
根据电路图自行编写并调试。
#include
char code shumaguan[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};
main()
{
while
(1)
{
switch (P2) { case 0xf0:
P0=shumaguan[0];break;
case 0xf1:
P0=shumaguan[1];break;
case 0xf2:
P0=shumaguan[2];break;
case 0xf3:
P0=shumaguan[3];break;
case 0xf4:
P0=shumaguan[4];break;
case 0xf5:
P0=shumaguan[5];break;
case 0xf6:
P0=shumaguan[6];break;
case 0xf7:
P0=shumaguan[7];break;
case 0xf8:
P0=shumaguan[8];break;
case 0xf9:
P0=shumaguan[9];break;
case 0xfa:
P0=shumaguan[10];break;
case 0xfb:
P0=shumaguan[11];break;
case 0xfc:
P0=shumaguan[12];break;
case 0xfd:
P0=shumaguan[13];break;
case 0xfe:
P0=shumaguan[14];break;
case 0xff:
P0=shumaguan[15];break;
default:
break; } }}
实验三外中断优先级实验
一、实验目的:
1.理解单片机中断优先级和优先权。
2.用PROTEUS设计,仿真基于AT89C51单片机的中断优先级实验。
3.掌握中断编程方法。
单片机主程序控制P0口数码管循环显示0~8;外中断0、外中断1发生时分别在P2口、P1口依次显示0~8。
通过实验可演示高优先级可中断低优先级,但低优先级的中断请求不能中断高优先级。
二、PROTEUS电路设计:
三、实验仪器和设备
PC机、PROTEUS软件或W-A-51综合开发学习板
四、源程序设计:
根据电路图自行编写并调试。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT00
ORG 0013H
LJMP INT11
ORG 0100H
MAIN:
MOV SP,#30H
SETB EX0
SETB IT0
ETB PX0
SETB EX0
SETB EX1
SETB IT1
SETB EX1
CLR PX1 SETB EA
Start
MOV R3,#09
MOV R0,#0
LOOP:
MOV DPTR,#TAB
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
INC R0
MOV R4,#5
CC:
MOV R2,#100
BB:
MOV R1,#200
AA:
NOP
NOP
DJNZ R1,AA
DJNZ R2,BB
DJNZ R4,CC
DJNZ R3,LOOP
SJMP START
INT00:
PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
MOV R,#09
MOV R0,#0
LOO:
MOV DPTR,#TAB
MOV A,R0
MOVC A,@A+DPTR
MOV P2,A
INC R0
MOV R4,#5
FF:
MOV R2,#100
EE:
MOV R1,#200
DD:
NOP
NOP DJNZ R1,DD
DJNZ R2,EE
DJNZ R4,FF
DJNZ R3,LOO
POP PSW
POP ACC
RETI
INT11:
PUSH ACC
PUSH PSW
SETB RS0
SETB RS1
MOV R3,#09
MOV R0,#0
LO:
MOV DPTR,#TAB
MOV A,R0
MOVC A,@A+DPTR
MOV P1,A
INC R0
MOV R4,#5
FG:
MOV R2,#100
EF:
MOV R1,#200
DF:
NOP
NOP DJNZ R1,DF
DJNZ R2,EF
DJNZ R4,FG
DJNZ R3,LO
POP PSW
POP ACC
RETI
TAB:
DB 0X40,0XF9,0X24,0X30,0X19,0X12,0X02,0XF8,0X00
实验四60S倒计时实验
一、实验目的:
1.通过AT89C51的定时器实现60S倒计时,显示采用两位数码管动态显示。
2.用PROTEUS设计,仿真基于AT89C51单片机的60S倒计时实验。
二、PROTEUS电路设计:
三、实验仪器和设备
PC机、PROTEUS软件或W-A-51综合开发学习板
四、源程序设计:
根据电路图自行编写并调试。
#include
#define uchar unsigned char
#define uint unsigned int
uchar temp,bai,shi,ge,num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint);
void main()
{
temp=60;
num=0;
P2=0x00;
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while
(1)
{
shi=temp/10;
ge=temp%10;
P0=table[shi];
P2=0x02;
delay(5);
P0=table[ge];
P2=0x01;
delay(5);
}
}
void T0_time()interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==40)
{
num=0;
temp--;
if(temp==0)
{
temp=60;
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
实验五A/D转换实验
一、实验目的:
1.掌握转换器ADC0809的使用。
2.用PROTEUS设计,仿真基于AT89C51单片机的A/D转换实验。
3.通过改变电位器的值改变模拟量的输入,经转换为数字量在LED上显示,比对模拟量和数字量的关系。
二、PROTEUS电路设计:
三、实验仪器和设备
PC机、PROTEUS软件或W-A-51综合开发学习板
四、源程序设计:
根据电路图自行编写并调试。
ORG 0000H
AJMP START
ORG 0003H
AJMP INT
ORG 0100H
START:
MOV R0,#50H
MOVX @R0,A
SETB IT0
SETB EX0
SETB EA
SETB F0
CLR P2.0
MOV DPTR,#TAB
LOOP:
JB F0,LOOP1
SETB P3.4
CLR P3.5
MOV A,R6
MOV P1,A
ACALL DLY
CLR P3.4
AJMP LHD
LOOP1:
SETB P3.5
CLR P3.4
MOV A,R7
MOV P1,A
ACALL DLY
CLR P3.5
LHD:
CPL F0
AJMP LOOP
INT:
MOVX A,@R0
MOV R7,A
SWAP A
MOV R6,A
MOV A,R7
ANL A,#0FH
MOVC A,@A+DPTR
MOV R7,A
MOV A,R6
ANL A,#0FH
MOVC A,@A+DPTR
MOV R6,A
MOVX @R0,A
RETI
DLY:
MOV R4,#0FH
DL:
MOV R5,#045H
DL1:
DJNZ R5,DL1
DJNZ R4,DL
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH END
综合性实验——小型计算器的设计
一、实验目的
1.用单片机AT89C51实现一个小型计算器,可以实现两位数以内的算术运算及显示。
2.通过P2口设计一个小型键盘4×4,键盘包括几个数字键0、1、2、4、5、6、7、8、9,以及功能键加,减,乘,除,等于,CLR(清除)。
键盘输入和计算结果可通过P0口输出到数码管,并以动态显示。
3.综合性实验内容包含一个4×4的键盘设计,以及两位数码管动态显示的设计方法。
二、PROTEUS电路设计
三、实验仪器和设备
PC机、PROTEUS软件或W-A-51综合开发学习板
四、源程序设计:
根据电路图自行编写并调试。
#include
sbitfou_bit=P1^0;
sbitthi_bit=P1^1;
sbitsec_bit=P1^2;
sbitfir_bit=P1^3;
unsignedcharnixiecode[2][16]={
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,//无小数点
0x82,0xf8,0x80,0x98,0x88,0x83,
0xc6,0xa1,0x86,0x8e},
};
voiddelay(unsignedintz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(unsignedintnum)
{
unsignedcharthou,hun,ten,bits;
thou=num/1000;
hun=num%1000/100;
ten=num%100/10;;
bits=num%10;
//显示千位
fou_bit=1;
P0=nixiecode[0][thou];
delay
(1);
P0=0xff;
fou_bit=0;
//显示百位
thi_bit=1;
P0=nixiecode[0][hun];
delay
(1);
P0=0xff;
thi_bit=0;
//显示十位
sec_bit=1;
P0=nixiecode[0][ten];
delay
(1);
P0=0xff;
sec_bit=0;
//显示个位
fir_bit=1;
P0=nixiecode[0][bits];
delay
(1);
P0=0xff;
fir_bit=0;
}
voidmain(void)
{
unsignedchartemp=0,operaone,operatwo;
unsignedintnumone=0,numtwo=0,num=0;
P0=0xff;
fou_bit=0;
thi_bit=0;
while
(1){
P2=0xfe;
switch(P2){
case0xee:
if(temp<2){
numone=numone*10+1;
while(P2==0xee);
num=numone;
temp++;
}
break;
case0xde:
if(temp<2){
numone=numone*10+2;
while(P2==0xde);
num=numone;
temp++;
}
break;
case0xbe:
if(temp<2){
numone=numone*10+3;
while(P2==0xbe);
num=numone;
temp++;
}
break;
case0x7e:
operaone='+';
while(P2==0x7e);
operatwo=operaone;
num=numtwo=numone;
numone=0;
temp=0;
break;
}
P2=0xfd;
switch(P2){
case0xed:
if(temp<2){
numone=numone*10+4;
while(P2==0xed);
num=numone;
temp++;
}
break;
case0xdd:
if(temp<2){
numone=numone*10+5;
while(P2==0xdd);
num=numone;
temp++;
}
break;
case0xbd:
if(temp<2){
numone=numone*10+6;
while(P2==0xbd);
num=numone;
temp++;
}
break;
case0x7d:
operaone='-';
while(P2==0x7d);
operatwo=operaone;
num=numtwo=numone;
numone=0;
temp=0;
break;
}
P2=0xfb;
switch(P2){
case0xeb:
if(temp<2){
numone=numone*10+7;
while(P2==0xeb);
num=numone;
temp++;
}
break;
case0xdb:
if(temp<2){
numone=numone*10+8;
while(P2==0xdb);
num=numone;
temp++;
}
break;
case0xbb:
if(temp<2){
numone=numone*10+9;
while(P2==0xbb);
num=numone;
temp++;
}
break;
case0x7b:
operaone='*';
while(P2==0x7b);
operatwo=operaone;
num=numtwo=numone;
numone=0;
temp=0;
break;
}
P2=0xf7;
switch(P2){
case0xe7:
if(temp<2){
numone=numone*10+0;
while(P2==0xe7);
num=numone;
temp++;
}
break;
case0xb7:
operaone='=';
while(P2==0xb7);
break;
case0x77:
operaone='/';
while(P2==0x77);
operatwo=operaone;
num=numtwo=numone;
numone=0;
temp=0;
break;
}
if(P2==0xd7){
delay(5);
if(P2==0xd7){
numone=0;
numtwo=0;
num=0;
operaone=0;
operatwo=0;
temp=0;
while(P2==0xd7);
}
}
if(operaone=='='){
switch(operatwo){
case'+':
num=numone+numtwo;break;
case'-':
num=numtwo-numone;break;
case'*':
num=numone*numtwo;break;
case'/':
num=numtwo/numone;break;
}
}
display(num);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广东 海洋大学 单片机 实验 全套