广东海洋大学单片机实验全套.docx

上传人:b****8 文档编号:9139902 上传时间:2023-05-17 格式:DOCX 页数:24 大小:134.69KB
下载 相关 举报
广东海洋大学单片机实验全套.docx_第1页
第1页 / 共24页
广东海洋大学单片机实验全套.docx_第2页
第2页 / 共24页
广东海洋大学单片机实验全套.docx_第3页
第3页 / 共24页
广东海洋大学单片机实验全套.docx_第4页
第4页 / 共24页
广东海洋大学单片机实验全套.docx_第5页
第5页 / 共24页
广东海洋大学单片机实验全套.docx_第6页
第6页 / 共24页
广东海洋大学单片机实验全套.docx_第7页
第7页 / 共24页
广东海洋大学单片机实验全套.docx_第8页
第8页 / 共24页
广东海洋大学单片机实验全套.docx_第9页
第9页 / 共24页
广东海洋大学单片机实验全套.docx_第10页
第10页 / 共24页
广东海洋大学单片机实验全套.docx_第11页
第11页 / 共24页
广东海洋大学单片机实验全套.docx_第12页
第12页 / 共24页
广东海洋大学单片机实验全套.docx_第13页
第13页 / 共24页
广东海洋大学单片机实验全套.docx_第14页
第14页 / 共24页
广东海洋大学单片机实验全套.docx_第15页
第15页 / 共24页
广东海洋大学单片机实验全套.docx_第16页
第16页 / 共24页
广东海洋大学单片机实验全套.docx_第17页
第17页 / 共24页
广东海洋大学单片机实验全套.docx_第18页
第18页 / 共24页
广东海洋大学单片机实验全套.docx_第19页
第19页 / 共24页
广东海洋大学单片机实验全套.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

广东海洋大学单片机实验全套.docx

《广东海洋大学单片机实验全套.docx》由会员分享,可在线阅读,更多相关《广东海洋大学单片机实验全套.docx(24页珍藏版)》请在冰点文库上搜索。

广东海洋大学单片机实验全套.docx

广东海洋大学单片机实验全套

 

广东海洋大学

实验一发光二极管流水灯实验

一、实验目的:

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);

}

}

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2