当前位置:文档之家› 华南农业大学单片机实验报告书

华南农业大学单片机实验报告书

第四章:实验实验一闪烁LED实验(2学时)一、实验目的1、学会使用Keil建立51单片机Project和编译程序;2、学会程序延时的方法;3、学会使用单片机I/O口实现输出。

二、实验内容通过软件延时,控制一位LED按设定的时间间隔闪烁。

三、实验过程与结果记录1、单片机开发试验仪相关部分原理图2、程序(自行编写,C语言与汇编均可)#include <reg52.h>sbit led=P1^0;unsigned int i,j;void main(){ while(1){led1=0;for(i=1000;i>0;i--)for(j=110;j>0;j--)led1=1;for(i=1000;i>0;i--)for(j=110;j>0;j--)}}四、思考题1、如何改变LED闪烁的时间间隔?通过延时函数,让CPU持续延时,使循环体内LED状态在延时的时间内保持不变。

2、如何实现更精确的闪烁时间间隔?用汇编可以精确延时,也可以用时钟中断,精确延时。

实验二移位LED实验(2学时)一、实验目的1、学会二进制移位操作和循环语句在单片机中的用法;2、认识CY位在汇编中如何参与移位。

二、实验内容1、1个LED从左到右循环依次点亮;2、1个LED左右来回循环依次点亮;3、花式流水灯,自定义样式点亮8个LED。

三、实验过程与结果记录1、单片机开发试验仪相关部分原理图,同实验一。

2、程序(自行编写,C语言与汇编均可)1):#include<reg52.h>#define uchar unsigned charuchar a;void delay(int time){int x,y;for(x=time;x>0;x--)for(y=110;y>0;y--);}void move(int x){ int i;if(x==1){a=0x01;}else if(x==2){a=0xaa;}else{a=0x80;}for(i=0;i<=7;i++){P0=a;delay(350);if(x==1){a=a<<1;}else if(x==2){a=a<<1;}else{a=a>>1;}}}void main(){int i;a=0x01;while(1){move(1);move(0);move(2);move(1);move(1);move(2);}}四、思考题1、比较RR,RL和RRC,RLC指令的异同。

2、LED共阳极接法与共阴极接法,输出I/O口时有什么不同?IO口输出对于不同情况,要取反。

实验三七段数码管实验(2学时)一、实验目的1、学习七段数码管静态显示阿拉伯数字;2、学习查表指令的使用。

二、实验内容采用静态显示的方法,编程实现单个七段数码管循环显示0~9,主程序中的循环语句反复将0~9的段码送至P0口,使数字0~9循环显示。

三、实验过程与结果记录1、单片机开发试验仪相关部分原理图,其中七段数码管采用共阳极接法。

2、程序(自行编写,C语言与汇编均可)#include<reg52.h>#define uchar unsigned charuchar a;uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ;void delay(int time){int x,y;for(x=time;x>0;x--)for(y=110;y>0;y--);}void main(){P0=tab[6];while(1){P0=tab[0];for(a=0;a<=9;a++){P0=tab[a];delay(1000);}}}四、思考题1、数码管静态显示与动态显示有何异同?请写出各自适用范围。

静态显示就是一直都是那个输出,动态显示是在人眼不能分辨的情况下,快速变换输出。

使用的io口比较少的时候,用动态显示。

2、数码管的共阳极接法与共阴极接法,输出字表有什么不同?跟二极管类似,也是取反。

实验四按键实验(2学时)一、实验目的1、学习独立按键的使用;2、学习矩阵键盘的使用。

二、实验内容判断独立按键输入(8位),当按下按键后,一位数码管显示对应的键值;三、实验过程与结果记录1、单片机开发试验仪相关部分原理图,其中LED与数码管部分同前述实验,按键部分原理图如下:2、程序(自行编写,C语言与汇编均可)#include<reg51.h>#define uchar unsigned charuchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ;//uchar code tab[]={0x90,0x80,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0} ;sbit key0=P1^0;sbit key1=P1^1;sbit key2=P1^2;sbit key3=P1^3;sbit key4=P1^4;sbit key5=P1^5;sbit key6=P1^6;sbit key7=P1^7;int a,x,y;void delay(int z){for(x=z;x>0;x--)for(y=110;y>0;y--); }void main(){P0=tab[9];while(1){if(key1==0){delay(10);if(key1==0){P0=tab[1];}while(!key1);}if(key2==0){delay(10);if(key2==0){P0=tab[2];}while(!key2);}if(key3==0){delay(10);if(key3==0){P0=tab[3];}while(!key3);}if(key4==0){delay(10);if(key4==0){P0=tab[4];}while(!key4); }if(key5==0) {delay(10);if(key5==0){P0=tab[5];}while(!key5); }if(key6==0) {delay(10);if(key6==0){P0=tab[6];}while(!key6); }if(key7==0) {delay(10);if(key7==0){P0=tab[7];}while(!key7);}}}四、思考题1、为什么需要按键防抖?如何实现软件去抖?因为机械按键按下的瞬间,会在1和0之间抖动数次,不去抖,会多次输入,产生干扰。

先判断是否按下按键,再延时10ms,进入第二重判断,在判断里面进行按键响应的对应操作,延时直到按键松开,退出第一重判断实验五串口通信实验(2学时)一、实验目的1、学习单片机与PC之间的串口通信;二、实验内容1、通过一位独立按键,每按一次,数字(从0开始)加一发送到PC调试软件上显示。

三、实验过程与结果记录1、单片机开发试验仪相关部分原理图,其中按键部分同前述,串口部分通过下载程序的USB(CH340-USB to TTL)实现。

2、程序(自行编写,C语言与汇编均可)#include <reg52.h>#include <stdio.h>//11.0592Mhzsbit key=P2^7;void Uart_Init(){TH1 = 0xFD; //晶振11.0592mhz 波特率设为9600TL1 = TH1;TMOD |= 0x20; //定时器1方式2SCON = 0x50; //串口接收使能ES = 1; //串口中断使能TR1 = 1; //定时器1使能TI = 1; //发送中断标记位,必须设置}void delay_ms(unsigned int n){unsigned int i,j;for(i=0;i<n;i++)for(j=0;j<123;j++);}void main(){int i = 0;Uart_Init();delay_ms(10);while(1){if(key==0){delay_ms(10);if(key==0){while(!key);printf("num=%d\r\n",i);i++;}}}}四、思考题1、单片机串行口通信需要注意什么?从硬件电平,软件设置(波特率,停止位……)等方面描述。

相关主题