实验报告内容实验题目:P口输出实验实验目的:通过实验了解P口做为输入输出方式使用时,CPU对P口的操作方式实验要求:控制8个LED灯,完成从左到右然后再从右到左再从左到右依次的循序流水实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:程序源代码:#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=0x7f;delay(50000);while(1){for(i=0;i<7;i++){led=_cror_(led,1);delay(50000);}for(i=0;i<7;i++){led=_crol_(led,1);delay(50000);}}}实验结果分析:实验日期:2017.10.24成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日实验报告内容实验要求:利用动态扫描和定时器0在数码管上显示出从200开始以1/10秒的速度往下递减直至100并保持此数,以此同时利用定时器1以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时LED灯全亮。
实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:程序源代码:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;uchar t0=0,t1,temp;uchar temp,bai,shi,ge;uint shu=200;uchar codesmgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39 ,0x5e,0x79,0x71};void delay(uint i){while(i--);}void xianshi(uchar bai,uchar shi,uchar ge){LSA = 0;LSB=0;LSC=0;P0=smgduan[ge];delay(250);P0=0x00;LSA=1;LSB=0;LSC=0;P0=smgduan[shi];delay(250);P0=0x00;LSA=0;LSB=1;LSC=0;P0=smgduan[bai];delay(250);P0=0x00;}void main(){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;temp=0xfe;P2=0xfe;while(1){xianshi(bai,shi,ge);}}void T0_time() interrupt 1 {TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++;if(t0==10){t0=1;temp=_crol_(temp,1);P2=temp; }}void T1_time() interrupt 3 {TH1=(65536-50000)/256; TL1=(65536-50000)%256; t1++;if(t1==2){t1=0;shu--;bai=shu/100;shi=shu%100/10;ge=shu%10;if(shu==100){TR1=0;TR0=0;P2=0x00;}}}实验结果分析:实验日期:2017.11.30成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日实验要求:以单片机为核心,设计数字秒表。
设计要求计时范围:0~59分59.59秒,整数四位数和小数两位数显示;计时精度10毫秒;复位按钮,计时器清零,并做好下次及时准备;可以对三个对象(A、B)计时,具有启/停控制;设开始、停止A、停止B、显示A、显示B、复位按钮。
实验器材:计算机和普中科技STC89C52单片机电路板实验步骤/程序流程分析:程序源代码:#include<reg52.h>#define uint unsigned int //宏定义无符号整型#define uchar unsigned char //宏定义无符号字符型#define DUAN (P0) //宏定义数码管段代码#define WEI (P2) //宏定义数码管位代码sbit keystart_stop = P3^2; //定义启动/停止按键sbit keyrest = P3^3; //定义复位/清零按键sbit keyrecord = P3^4; //定义计数/存储按键sbit keydispaly = P3^5; //定义计数/显示按键sbit beep = P3^6; //定义蜂鸣器sbit led = P3^7; //定义uchar x,msec5,msec10,second,minute; //时间变量uchar msec,sec,min; //显示变量uchar code table1[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管数组不带点显示uchar code table2[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x58,0x00,0x10}; //共阳数码管带点显示/********************************函数名称: 延时函数delay功能: 延时指定毫秒参数: uchar x返回值: 无********************************/void delay(uchar x){uint b,c;for(b = x;b>0;b--)for(c = 110;c>0;c--);}/********************************函数名称: 定时器初始化函数time_init(void)功能: 定时器初始化参数: 无返回值: 无*********************************/void time_init(void){msec5=0;TMOD = 0x01;TH0 = (65536-9174)/256;TL0 = (65536-9174)%256;ET0 = 1;TR0 = 1;EA = 1;}/********************************函数名称: 显示函数display()功能: 数码管显示参数: uchar msec,uchar sec,uchar min返回值: 无*********************************/void display(uchar msec,uchar sec,uchar min){DUAN = table1[(msec%10)%10];// 0.01秒 5.64%10=64%10=0.04 WEI = 0x01;delay(2);WEI = 0x00;DUAN = table1[(msec/10)%10];// 0.1秒 5.64/10=56%10=0.6WEI = 0x02;delay(2);WEI = 0x00;DUAN = table2[(sec%10)]; // 1秒564%10=6WEI = 0x04;delay(2);WEI = 0x00;DUAN = table1[(sec/10)]; // 10秒564/10=56%10=6WEI = 0x08;delay(2);WEI = 0x00;DUAN = table1[(min%10)]; // 1分564/10=56%10=6WEI = 0x10;delay(2);WEI = 0x00;DUAN = table1[(min/10)]; // 10分564/10=56%10=6WEI = 0x20;delay(2);WEI = 0x00;}/******************************** 函数名称: 蜂鸣器函数功能: 蜂鸣器发声参数: 无返回值: 无*********************************/ void beep_led(){beep = 0;delay(600);beep = 1;delay(600);led = 0;delay(600);led = 1;}/******************************** 函数名称: 按键函数功能: 调试按键的函数参数: 无返回值: 无*********************************/ void keys(){if(keystart_stop==0){delay(5);if(keystart_stop==0)TR0 = ~TR0;beep_led();while(!keystart_stop);}if(keyrest==0){delay(5);if(keyrest==0)TR0 = 0;msec5=0;msec10=0,second=0;minute=0;beep_led();while(!keyrest);}}/********************************函数名称: 主函数功能:参数: 无返回值:*********************************/void main(){uchar jishu=0;uchar flag=0;uchar msec1=0,sec1=0,min1=0;uchar msec2=0,sec2=0,min2=0;time_init();while(1){keys(); // 键盘的扫描函数一定要放在while循环里边msec=msec10;sec=second;min=minute;if(flag==1){display(msec1,sec1,min1);}else if(flag==0){display(msec,sec,min);}else{display(msec2,sec2,min2);}if(keyrecord==0){delay(5);if(keyrecord==0){beep_led();jishu++;if(jishu>2){jishu=0;}else if(jishu==1){msec1=msec10;sec1=second;min1=minute;}else if(jishu==2){msec2=msec10;sec2=second;min2=minute;}}while(!keyrecord);}if(keydispaly==0){delay(5);if(keydispaly==0){beep_led() ;flag++;if(flag>2)flag=0;}while(!keydispaly);}}}/**********************************函数名称: 中断函数功能:参数: 无返回值:***********************************/void timer0 () interrupt 1{TH0 = (65536-9174)/256;TL0 = (65536-9174)%256;msec10++; // msec10加一次等于10ms if(msec10==100) // j=100 为1s{msec10 = 0;second++;if(second==60) // second=60 为1minute{second=0 ;minute++;if(minute==60) // minute=60 为1hour{minute=0 ;}}}}实验结果分析:实验日期:2017.12.01成绩评定:□优秀(100-90分)□良好(89-80分)□中等(79-70分)□及格(69-60分)□不及格(60-0分)教师签名:年月日。