当前位置:文档之家› 单片机实验报告

单片机实验报告

哈尔滨师范大学计算机科学与信息工程学院实验报告手册课程名称:嵌入式系统原理与应用指导教师:王洪侠专业:计算机科学与技术20 18 年—20 19 年第 1 学期姓名:吴晗学号:2016040860年级:2016级班级: 2 班实验报告内容实验题目:P1口输出实验实验目的:通过实验了解P1口做为输入输出方式使用时,CPU对P1口的操作方式实验要求:控制8个LED灯,完成从左到右然后从右到左再从左到右依次的循序流水实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:1.单片机由P2口控制流水灯2.根据题目要求实现每点亮一盏灯就熄灭前一盏3.套用循环实现从左到右的动态流水式亮灯4.完成从左到右再从右到左再从左刀右流水亮灯程序源代码:#include "reg52.h"#include<intrins.h>typedef unsigned int u16;typedef unsigned char u8;#define led P2void delay(u16 i){while(i--);}void main(){u8 i;led=0xfe;delay(50000); //while(1){/* for(i=0;i<8;i++){P2=~(0x01<<i); //将1右移i位,然后将结果取反赋值到P2口delay(50000); //大约延时450ms}*/for(i=0;i<7;i++) //{led=_crol_(led,1);delay(50000);}for(i=0;i<7;i++) {led=_cror_(led,1);delay(50000);}}}实验结果分析:图1.1 实现从左到右图1.2 实现从右到左实验日期: 2018.11.9成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日实验报告内容实验要求:数码管上的数字以200ms的速度从0增加到20后数码管上显示hello 实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:1.使用循环自增实现从0增加到202.用delay函数实现数值增加的速度(间隔200ms)3.数值自增完毕后数值消失然后按位依次显示“h”,“e”,“l”,“l”,“o”程序源代码:#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/**tatle_du数组数据为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,H,L**/uchar code tatle_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x79,0x38,0};uchar code tatle_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};sbit dula=P2^6;sbit wela=P2^7;uchar tt,t0,numwe,numdu,temp,bai,shi,ge,flag,flag1;uint shu;void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge);void delay(uchar z);void inter_init();void main(){inter_init();while(1){if(flag1 != 1){display(7,6,5,bai,shi,ge);}else{display(16,17,18,18,0,19);}}}/*定时器0流水灯与闪烁*/void inter0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt++;/*如果减数不到398,流水灯与减数同时运行,如果到了398开启闪烁*/ if(flag != 1){/*流水灯*/if(tt==10){tt=0;delay(5);temp=_crol_(temp,1);P1=temp;}}else{/*使灯闪烁4秒*/if(tt%4==0){P1=~P1;}if(tt==80){TR0=0;P1=0xff;flag1=1;}}}/*定时器1数码管显示*/void inter1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%256;t0++;if(t0==2){t0=0;shu--;bai=shu/100;shi=shu%100/10;ge=shu%10;if(shu==398)TR0=0; //关闭定时器0,关闭流水灯P1=0xff;TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt=0;TR0=1; //开启定时器0,并填充数据。

使灯闪烁flag=1;TR1=0; //关闭定时器1保持数据显示}}}void delay(uchar z){uchar x,y;for(x=z;x>0;x--){for(y=110;y>0;y--);}}void inter_init(){tt=0;t0=0;flag=0;flag1=0;shu=432;temp=0xfe;P1=temp;TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;}void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge) {dula=1;P0=tatle_du[aa];dula=0;P0=0xff;wela=1;P0=0xfe;delay(5);dula=1;P0=tatle_du[bb];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(5);dula=1;P0=tatle_du[cc];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(5);dula=1;P0=tatle_du[bai]; dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(5);dula=1;P0=tatle_du[shi];dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(5);dula=1;P0=tatle_du[ge];dula=0;P0=0xff;wela=1;P0=0xdf;wela=0;delay(5);}实验结果分析:图2.1 数值递增图2.2 显示“hello实验日期:2018.11.16成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日实验题目:键盘检测实验实验要求:自行设计实验内容,完成键盘的检测,设计一个程序用来实现按照键盘顺序依次对应1-15的ASCII码值实验器材: 计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:1.定义延迟函数delay,全局变量 KeyVaule 记录按键2.进入keyDown函数,先读取按键是否按下,延时10ms进行消抖,再次检测键盘是否按下,先测试列再测试行,确定按下那个键,给KeyValue赋相应值。

3.输出KeyValue的值程序源代码:#include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;u8 KeyValue;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(u16 i){while(i--);}void KeyDown(void){char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)//读取按键是否按下{delay(1000);if(GPIO_KEY!=0x0f)//再次检测键盘是否按下{GPIO_KEY=0X0F;switch(GPIO_KEY){case(0X07): KeyValue=0;break;case(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;}//测试行GPIO_KEY=0XF0;switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0): KeyValue=KeyValue+12;break;}while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测{delay(1000);a++;}}}}void main(){LSA=0; //给一个数码管提供位选LSB=0;LSC=0;while(1){KeyDown(); //按键判断函数GPIO_DIG=smgduan[KeyValue]; //}}实验结果分析:图3.1 显示按键所对应的ASCII值(4)图3.2 显示按键所对应的ASCII值(F)实验日期:2018.11.19成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日实验题目:综合性实验实验要求:模拟一个可以直接引爆或被终止的定时炸弹实验器材: 计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:1.初始化定时器,设定初始时间sec=102.KeyDown函数检测矩阵键盘是否按下,若检测到按下,执行b2函数,使数码管直接归零,蜂鸣器发出持续尖锐声。

相关主题