发光二极管流水灯实验.docx

上传人:b****7 文档编号:10510976 上传时间:2023-02-17 格式:DOCX 页数:18 大小:1.18MB
下载 相关 举报
发光二极管流水灯实验.docx_第1页
第1页 / 共18页
发光二极管流水灯实验.docx_第2页
第2页 / 共18页
发光二极管流水灯实验.docx_第3页
第3页 / 共18页
发光二极管流水灯实验.docx_第4页
第4页 / 共18页
发光二极管流水灯实验.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

发光二极管流水灯实验.docx

《发光二极管流水灯实验.docx》由会员分享,可在线阅读,更多相关《发光二极管流水灯实验.docx(18页珍藏版)》请在冰豆网上搜索。

发光二极管流水灯实验.docx

发光二极管流水灯实验

实验

发光二极管流水灯实验

 

一、实验目的:

1.通过AT89C51单片机控制8个发光二极管,八个发光二极管分别接在单片机的P0.0—P0.7

接口上,输出“0”时,发光二极管亮。

开始时P0.0TP0.1…「P0.7,实现亮点以1HZ频率循环移动。

2.用PROTEUS^计,仿真以AT89C51为核心的发光二极管流水灯实验装置。

3.掌握发光二极管的控制方法。

二、PROTEU电路设计:

三、程序部分

#includesbitcontrol=P3A7;voiddelay(intz){

intx,y;

for(x=z;x>0;x--)for(y=110;y>0;y--);

}

voidmain()

{

inti,tmp;

control=0;

P0=0xef;delay(1000);for(i=1;i<=7;i++){

tmp=P0;

P0=(tmp>>1)+0x80;delay(1000);

}

}

实验二

开关控制LED数码管实验

一、实验目的:

1.通过AT89C51读入4位开关K1、K2、K3、K4的输入状态,并按照二进制编码关系0-F输

出到数码管显示。

(如K4K3K2K1全部按下,则显示F;若只有K2按下,则显示2。

2•掌握LED数码管的静态显示。

3.掌握I/O口的控制方法。

、PROTEU电路设计:

 

PintAH蚣H站

R2.2SA1H爼Ml

^2.5«13]PJjSMiU

FIJJR^D1蹲TEDFlJ,"klUpagwrTiKaiftD输地LP3EWf

p

I

I

1

I

j

■lTal2

mowMiFO.IluJCHFOJWQJFC.3L4D3to相3FPSIACS

KIJ&UD6

IKT

 

、程序部分

#includeunsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,

0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,};unsignedcharKEY;

voidmain()

{

while

(1)

{

KEY=P2;

switch(KEY)

{

case0xff:

P0=table[0];break;case0xfe:

P0=table[1];break;case0xfd:

P0=table[2];break;case0xfc:

P0=table[3];break;case0xfb:

P0=table[4];break;case0xfa:

P0=table[5];break;case0xf9:

P0=table[6];break;case0xf8:

P0=table[7];break;case0xf7:

P0=table[8];break;case0xf6:

P0=table[9];break;case0xf5:

P0=table[10];break;case0xf4:

P0=table[11];break;case0xf3:

P0=table[12];break;case0xf2:

P0=table[13];break;case0xf1:

P0=table[14];break;case0xf0:

P0=table[15];break;default:

break;

实验

外中断优先级实验

、实验目的:

1.理解单片机中断优先级和优先权。

2.用PROTEU设计,仿真基于AT89C51单片机的中断优先级实验

3.掌握中断编程方法。

单片机主程序控制P0口数码管循环显示0〜8;外中断0、外中断1发生时分别在P2口、P1口依次显示0〜&通过实验可演示高优先级可中断低优先级,但低优先级的中断请求不能中断高优先级。

、PROTEU电路设计:

 

、程序部分

共阳数码

#include

unsignedcharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80};//

管的段码

voiddelay(intz){

//

延时子程序,大约1ms

intx,y;

for(x=110;x>0;x--)for(y=z;y>0;y--);

}

inti0=0,i1=0;voidmain()

{

//

用于中断0,1显示数码管的变量

inti;EX0=1;

//

开外部中断0

EX1=1;

IT0=1;

IT1=1;

PX0=1;

PX1=0;EA=1;while

(1){

//

开外部中断1

//开总中断

for(i=0;i<9;i++)

{

P0=table[i];delay(200);

//P0循环显示0~8

}

voidint0()interrupt0

{

//

外部中断0优先级高于外部中断1,中断号为

for(i0=0;i0<9;i0++)

{

//显示

0~8

P2=table[i0];

delay(200);

}

voidint1()interrupt2

{

//

外部中断1,中断号为

for(i1=0;i1<9;i1++)

{

P1=table[i1];delay(200);

//显示

0~8

实验四60S倒计时实验

实验目的:

 

1.通过AT89C51的定时器实现60S倒计时,显示采用两位数码管动态显示

2.用PROTEU设计,仿真基于AT89C51单片机的60S倒计时实验。

二、PROTEU电路设计:

三、程序部分

#include

sbitGE=P2A1;

sbitSHI=P2A0;

intcount=0,number=60;

unsignedcharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

voiddelay(intz);

voiddisplay。

voidmain()

{

EA=1;

ET0=1;

TMOD=0X01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

while

(1)

{

display();

}

}

voiddelay(intz)

{

intx,y;

for(x=110;x>0;x--)for(y=z;y>0;y--);

}

voiddisplay()

{

SHI=0;

GE=1;

P1=table[number%10];delay(10);

GE=0;

SHI=1;

P1=table[number/10];delay(10);

}

voidtime_count()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;count++;

if(count==20)

{

count=0;

number--;

if(number<0)number=59;

一、实验目的:

1.掌握键盘设计中按键识别的原则。

2.用PROTEU设计一个常规4X4的矩阵键盘。

3.键盘编码规则自己定义,分别对应数字键0-9、A-F,按下对应的按键显示在数

码管上显示对应的数据。

、PROTEU电路设计:

三、程序部分

#include

sbit

show_1=

=P20;

sbit

show_2=

=pig

sbit

show_3=

=p“2;

sbit

show_4=

=P1A3;

unsignedcharj,k,temp,key;

unsignedcharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,};

voiddelay(unsignedchari);

voiddisplay(unsignedcharnum);

voidkey_scan();

voidmain()

{

while

(1)

{

key_scan();display(key);

}

}

voiddelay(unsignedchari)

{

for(j=i;j>0;j--)

for(k=110;k>0;k--);

}

voiddisplay(unsignedcharnum){

P0=table[num];show_4=0;

}

voidkey_scan()

{

P2=0xef;

temp=P2;temp=temp&0x0f;if(temp!

=0x0f)

{

delay(10);

if(temp!

=0x0f)

{

temp=P2;

switch(temp)

{

case0xe7:

key=0;break;

case0xeb:

key=1;break;

case0xed:

key=2;break;

case0xee:

key=3;break;

}while(temp!

=0x0f)

{

temp=P2;temp=temp&0x0f;

}

display(key);

}

}

P2=0xdf;temp=P2;temp=temp&0x0f;if(temp!

=0x0f)

{

delay(10);if(temp!

=0x0f){

temp=P2;switch(temp){

case0xd7:

key=4;

break;

case0xdb:

key=5;

break;

case0xdd:

key=6;

break;

case0xde:

key=7;

break;

}while(temp!

=0x0f)

{

temp=P2;temp=temp&0x0f;

}

display(key);

}

}

P2=0xbf;temp=P2;temp=temp&0x0f;

if(temp!

=0x0f)

{

delay(10);

if(temp!

=0x0f){

temp=P2;

switch(temp){

case0xb7:

key=8;break;

case0xbb:

key=9;break;

case0xbd:

key=10;break;

case0xbe:

key=11;break;

}while(temp!

=0x0f)

{

temp=P2;temp=temp&0x0f;

display(key);

}

}

}

P2=0x7f;

temp=P2;temp=temp&0x0f;if(temp!

=0x0f)

{

delay(10);if(temp!

=0x0f)

{

temp=P2;switch(temp)

{

case0x77:

key=12;break;

case0x7b:

key=13;break;

case0x7d:

key=14;break;

case0x7e:

key=15;break;

}while(temp!

=0x0f)

{

temp=P2;temp=temp&0x0f;

}

display(key);

}

}

}

实验六AD转换程序设计

、实验目的:

1.掌握转换器ADC0809勺使用

2.用PROTEU设计,仿真基于AT89C51单片机的A/D转换实验。

3.通过改变电位器的值改变模拟量的输入,经转换为数字量在LED上显示,比对

模拟量和数字量的关系。

、PROTEU电路设计:

三、程序部分

#include

sbitOE=P3A1;

sbitSTART=卩3人3;

sbitNUM_1=P3A4;

sbitNUM_2=P3A5;

sbitNUM_3=P3A6;

sbitNUM_4=卩3人7;

sbitdp=卩1人7;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsignedintdate;

voidshow();

voiddelay(intz)

{

intx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);

}

voidmain()

{

EX0=1;

IT0=1;

EA=1;

START=0;

START=1;

START=0;while

(1);

}

voidover()interrupt0

{

OE=1;date=P0;

OE=0;

show();

START=0;

START=1;

START=0;

}

voidshow()

{

NUM_3=1;

NUM_2=1;

P1=table[date/51];dp=1;NUM_1=0;delay(5);

NUM_1=1;

P1=table[date%51*100/51/10];

NUM_2=0;

delay(5);

NUM_2=1;

P1=table[date%51*100/51%10];

NUM_3=0;

delay(5);

、实验目的:

1.掌握单片机串口通信程序的设计

2.了接RS232接口通信的特点。

3.双机通信:

分别把接收到的对方通过逻辑开关输入的信息在本地数码管上显示,如下图甲机的逻辑开关数据为81H,乙机通过串口接收该数据并数码关管显示,而甲机显示乙机发送的数据88Ho

、PROTEU电路设计:

 

三、程序部分

#includevoidinit(){

TMOD=0X20;//定时器1方式2

TH1=0XFD;

TL1=0XFD;//装入初值

TR1=1;//启动定时器

//设置方式1

SM0=0;SM1=1;

TI=0;

RI=0;

ES=1;

//打开串口中断

EA=1;

//打开总中断

ES=1;

//打开串口中断

REN=1;

//接收使能

SBUF=P1;

}

voidmain()

{

init();

while

(1);

}

voidserial()interrupt4

{

if(RI)

{

RI=0;

P0=SBUF;

//

从缓冲区中把接收的字符放入c中

}if(TI)

{

TI=0;

SBUF=P1;

}

}

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

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1