收藏 分享(赏)

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

上传人:精品资料 文档编号:10191747 上传时间:2019-10-18 格式:DOC 页数:16 大小:1.99MB
下载 相关 举报
发光二极管流水灯实验.doc_第1页
第1页 / 共16页
发光二极管流水灯实验.doc_第2页
第2页 / 共16页
发光二极管流水灯实验.doc_第3页
第3页 / 共16页
发光二极管流水灯实验.doc_第4页
第4页 / 共16页
发光二极管流水灯实验.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、1实验一 发光二极管流水灯实验一、实验目的:1.通过AT89C51单片机控制8个发光二极管,八个发光二极管分别接在单片机的P0.0P0.7接口上,输出“0” 时,发光二极管亮。开始时P0.0P0.1. P0.7,实现亮点以1HZ频率循环移动。2.用PROTEUS 设计,仿真以AT89C51为核心的发光二极管流水灯实验装置。3.掌握发光二极管的控制方法。二、PROTEUS电路设计:三、程序部分#includesbit control = P37;void delay(int z)int x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main()int i,tmp

2、;control = 0;P0 = 0xef;delay(1000);for(i=1;i1)+ 0x80;delay(1000);2实验二 开关控制LED数码管实验一、实验目的:1.通过AT89C51读入4位开关K1 、K2、K3、K4的输入状态,并按照二进制编码关系0-F输出到数码管显示。(如K4K3K2K1全部按下,则显示F ;若只有K2按下,则显示2。)2.掌握LED数码管的静态显示。3.掌握I/O口的控制方法。二、PROTEUS电路设计:3三、程序部分#includeunsigned char table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

3、0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,;unsigned char KEY;void main()while(1)KEY = P2;switch(KEY)case 0xff:P0 = table0;break;case 0xfe:P0 = table1;break;case 0xfd:P0 = table2;break;case 0xfc:P0 = table3;break;case 0xfb:P0 = table4;break;case 0xfa:P0 = table5;break;case 0xf9:P0 = table6;break;case 0

4、xf8:P0 = table7;break;case 0xf7:P0 = table8;break;case 0xf6:P0 = table9;break;case 0xf5:P0 = table10;break;case 0xf4:P0 = table11;break;case 0xf3:P0 = table12;break;case 0xf2:P0 = table13;break;case 0xf1:P0 = table14;break;case 0xf0:P0 = table15;break;default :break;4实验三 外中断优先级实验一、实验目的:1.理解单片机中断优先级和

5、优先权。2.用PROTEUS 设计,仿真基于AT89C51单片机的中断优先级实验。3.掌握中断编程方法。单片机主程序控制P0口数码管循环显示08;外中断0、外中断1发生时分别在P2口、P1口依次显示08。通过实验可演示高优先级可中断低优先级,但低优先级的中断请求不能中断高优先级。二、PROTEUS电路设计:5三、程序部分#includeunsigned char code table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80;/ 共阳数码管的段码void delay(int z) /延时子程序,大约1msint x,y;for(x=110;x0;

6、x-)for(y=z;y0;y-);int i0=0,i1=0; / 用于中断0,1显示数码管的变量void main()int i;EX0 = 1; /开外部中断0EX1 = 1; /开外部中断1IT0 = 1;IT1 = 1;PX0 = 1;PX1 = 0;EA = 1; /开总中断while(1)for(i=0;isbit GE = P21;sbit SHI = P20;int count = 0,number = 60;unsigned char code table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83

7、,0xC6,0xA1,0x86,0x8E;void delay(int z);void display();void main()EA = 1;7ET0 = 1;TMOD = 0X01;TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;TR0 = 1;while(1)display(); void delay(int z)int x,y;for(x=110;x0;x-)for(y=z;y0;y-);void display()SHI = 0;GE = 1;P1 = tablenumber%10;delay(10);GE = 0;SHI = 1;P1

8、 = tablenumber/10;delay(10);void time_count() interrupt 1TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;count+;if(count = 20)count = 0;number-;if(number sbit show_1 = P10;sbit show_2 = P11;sbit show_3 = P12;sbit show_4 = P13;unsigned char j,k,temp,key;unsigned char code table=0xC0,0xF9,0xA4,0xB0,0x

9、99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,;void delay(unsigned char i);void display(unsigned char num);9void key_scan();void main()while(1)key_scan();display(key);void delay(unsigned char i)for(j=i;j0;j-)for(k=110;k0;k-);void display(unsigned char num)P0=tablenum;show_4 = 0;void key_

10、scan()P2=0xef;temp=P2;temp=tempif(temp!=0x0f)delay(10);if(temp!=0x0f)temp=P2;switch(temp)case 0xe7:key=0;break;case 0xeb:key=1;break;case 0xed:key=2;break;case 0xee:key=3;break;10while(temp!=0x0f)temp=P2;temp=tempdisplay(key);P2=0xdf;temp=P2;temp=tempif(temp!=0x0f)delay(10);if(temp!=0x0f)temp=P2;swi

11、tch(temp)case 0xd7:key=4;break;case 0xdb:key=5;break;case 0xdd:key=6;break;case 0xde:key=7;break;while(temp!=0x0f)temp=P2;temp=tempdisplay(key);11P2=0xbf;temp=P2;temp=tempif(temp!=0x0f)delay(10);if(temp!=0x0f)temp=P2;switch(temp)case 0xb7:key=8;break;case 0xbb:key=9;break;case 0xbd:key=10;break;case

12、 0xbe:key=11;break;while(temp!=0x0f)temp=P2;temp=tempdisplay(key); P2=0x7f;temp=P2;temp=tempif(temp!=0x0f)delay(10);if(temp!=0x0f)temp=P2;switch(temp)case 0x77:12key=12;break;case 0x7b:key=13;break;case 0x7d:key=14;break;case 0x7e:key=15;break;while(temp!=0x0f)temp=P2;temp=tempdisplay(key);13实验六 AD转

13、换程序设计一、实验目的:1.掌握转换器ADC0809的使用。2.用PROTEUS 设计,仿真基于AT89C51单片机的A/D转换实验。3.通过改变电位器的值改变模拟量的输入,经转换为数字量在LED上显示,比对模拟量和数字量的关系。二、PROTEUS电路设计:三、程序部分#includesbit OE = P31;sbit START = P33;sbit NUM_1 = P34;sbit NUM_2 = P35;sbit NUM_3 = P36;sbit NUM_4 = P37;sbit dp = P17;unsigned char code table=0x3f,0x06,0x5b,0x4f

14、,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;14unsigned int date;void show();void delay(int z)int x,y;for(x=z;x0;x-)for(y=110;y0;y-); void main()EX0 = 1;IT0 = 1;EA = 1; START = 0;START = 1;START = 0;while(1);void over() interrupt 0OE = 1;date = P0;OE = 0;show();START = 0;START = 1;ST

15、ART = 0;void show()NUM_3 = 1;NUM_2 = 1;P1=tabledate/51;dp = 1;NUM_1 = 0;delay(5);NUM_1 = 1;P1=tabledate%51*100/51/10;NUM_2 = 0;delay(5);NUM_2 = 1;P1=tabledate%51*100/51%10;NUM_3 = 0;delay(5);15实验七 双机通信实验一、实验目的:1.掌握单片机串口通信程序的设计。2.了接RS232接口通信的特点。3.双机通信:分别把接收到的对方通过逻辑开关输入的信息在本地数码管上显示,如下图甲机的逻辑开关数据为81H,乙机

16、通过串口接收该数据并数码关管显示,而甲机显示乙机发送的数据88H。二、PROTEUS电路设计:三、程序部分#includevoid init()TMOD = 0X20;/定时器1方式2TH1 = 0XFD;TL1 = 0XFD; /装入初值TR1 = 1; /启动定时器SM0 = 0;SM1 = 1; /设置方式1TI = 0;16RI = 0;ES = 1; /打开串口中断EA = 1; /打开总中断ES = 1; /打开串口中断REN = 1; /接收使能SBUF = P1;void main()init();while(1);void serial() interrupt 4if(RI)RI = 0;P0 = SBUF; / 从缓冲区中把接收的字符放入c中 if(TI)TI = 0;SBUF = P1;

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报