当前位置:文档之家› 杭电自动化单片机实验报告

杭电自动化单片机实验报告

单片机原理与应用及 C51程序设计实验报告实验名称:单片机技术实验实验一继电器控制输出实验一、实验目的1.掌握STC12C5A16S2单片机的最基本电路的设计;2.了解单片机I/O端口的使用方法;3.了解继电器和蜂鸣器控制电路以及小电压控制大电压的方法。

二、实验要求1.利用STC12C5A16S2单片机的P1.2、P1.3口作按钮S9和S10输入,P1.0和P1.1口作开关量输出,并分别控制一个5V的继电器和蜂鸣器。

2.当S9闭合时,P1.0控制继电器闭合并控制灯泡闪亮;当S9断开时,继电器触电断开,灯泡不亮;3.当S10闭合时,P1.1控制蜂鸣器闭合并发出声音;当S10断开时,蜂鸣器不响。

三、电路四、原理说明Q1、Q2为9012三极管即PNP型,低电平导通,当S9或S10按下时,相应的IO口拉低,当P1.0或P1.1赋0时即可控制继电器的吸合活着蜂鸣器的发声。

五、程序代码#include <reg52.h>sbit L1=P1^1;sbit L2=P1^2;sbit L3=P1^3;sbit L0=P1^0;//定义位变量void delay(){int i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);//利用系统时钟,定义延时函数}void main (){int n=20;while(1) //不断循环检测{if(L2==0) //判断S9输入{while(n--){L0=0;delay();L0=1;delay(); //灯泡以2*delay为周期闪亮}n=20;}if(L3==0) //判断S10闭合{while(n--){L1=0;delay();L1=1;delay(); //蜂鸣器以2*delay为周期发声}n=20;}}}实验二 LED轮换点亮实验一、实验目的1.掌握STC12C5A16S2单片机的I/O电路设计;2.学习SN74HC573数据锁存输出方法。

二、实验要求1.利用SN74HC573对STC12C5A16S2单片机的P0进行扩展,驱动LED控制输出;2.编写程序,使P0.0~P0.7上的发光二极管循环点亮;P2.7控制SN74HC573芯片的使能;三、电路四、原理说明1.数码管低电平有效;2.SN74HC573芯片,当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。

当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。

五、程序代码#include<reg52.h>void delay(){int i,j;for(i=0;i<500;i++)for(j=0;j<500;j++);} //延时函数void main(){unsigned int i=1;P0=0xfe; //P0初始为1111 11110,也可定义为0000 0001,左移后取反 while(1){i++;if(i<=8)P0=P0<<1; //左移一位P0=P0+1; //末尾补一,从1111 1100变为1111 1101,从而不断循环 if(i>8) //八位循环完毕,进行下一轮初始化{i=1;P0=0xfe;}delay(); //延时}}实验三 LED数码管显示实验一、实验目的1.了解八段共阴极LED工作动态显示原理;2.掌握单片机LED工作动态显示的方法。

二、实验要求1.P0口的2个扩展口作为段控口和位控口,通过使用P2.6和P2.7对SN74HC573芯片的使能。

并在数码管上显示1~8.2.完成全部程序和电路调试工作。

三、电路四、原理说明1.U9 作为数码管的段选,U7 作为数码管的位选;2.SN74HC573 锁存芯片使用详见实验六。

3.LED 采用的是七段共阴极数码管,显示器由 8 个发光二极管 LED 组成,其中包括7 个细长型的 LED 和 1 个小数点型的 LED。

分别为 a、b、c、d、e、f、g、dp 共 8 段,其中 dp 为小数点。

补充:数码管的位选:即位置选择的意思,比如1-8个,选择哪一个使能数码管的段选:即选择数码管的那一段,从而控制输出数字五、程序设计#include<reg52.h>sbit duan=P2^6; //定义段控位sbit wei=P2^7; //定义位控位unsigned char code table[]= //控制字无规律,建表查询{0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f} ;void delay(){int i,j;for(i=0;i<5;i++)for(j=0;j<50;j++);} //延时void main(){unsigned char m=0x01;//m0000 0001unsigned char h;unsigned int n=0;while(1){h=~m; //m取反wei=0; //位控位关,段控位开duan=1;P0=table[n]; //显示段wei=1; //锁存段duan=0;P0=h;wei=0; //锁存位delay();n++; //在表中依次查询if(n<=7) //1-8共八个数码管循环使能{m=m<<1;//}else //循环一遍后则初始化{n=0;m=0x01;}}}实验四 24小时时钟显示控制实验一、实验目的1.掌握定时器工作原理和使用方法;2.掌握单片机外部中断和定时中断的控制方法;二、实验要求1.P0口的2个扩展口作为段控口和位控口,通过使用P2.6和P2.7对SN74HC573芯片的使能,设计一个24小时时钟显示控制电路,时间显示时只用左边6个LED数码管;2.利用INT0按钮作为启动/停止键,INT1按钮作为清0键,并按键采用中断响应;3.系统复位时,显示“000000”,当第一次按下启动/停止键时,开始计时,再按一次时钟停止,再按又从原来时间的基础上继续计时........;当按下清0键时,停止计时并将时间恢复到“000000”4.完成全部程序和电路调试工作;三、电路四、原理说明1.U9 作为数码管的段选,U7 作为数码管的位选;2.SN74HC573芯片,当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。

当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。

五、程序代码#include<reg51.h>sbit duan=P2^6; //定义段控位,位地址P2.6sbit wei=P2^7; //定义位控位unsigned char code table[]= //数码管0~9的段表{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ;void delay(){int i,j;for(i=0;i<5;i++)for(j=0;j<50;j++);} //延时unsigned int h=0; //hourunsigned int m=0; //minuteunsigned int s=0; //secondunsigned int flag=0; //判断INT0的标志flagvoid main(){unsigned int num=0,i;unsigned int zi[6]={0}; //用于存储时间的时、分、秒的6个数int k=0x01h,n;TMOD=0x01; //定时器1工作在方式1(2^16=65536)TH0=0xD8; //65536-10000=1101 1000 1111 0000B(D8 F0) TL0=0xF0;EA=1; //开总中断ET0=1; //定时器1中断允许EX0=1; //外部中断0、1允许EX1=1;IT0=1; //外部中断0、1选择边沿触发IT1=1;TR0=0; //开始不启动,按下INT0后启动while(1){if(s==60) //秒向分进位,并归零{s=0;m++;}if(m==60) //分向时进位{m=0;h++;}zi[0]=h/10; //存入hour高位zi[1]=h%10; //存入hour低位zi[2]=m/10;zi[3]=m%10;zi[4]=s/10;zi[5]=s%10;for(i=0;i<6;i++) //显示{wei=0;duan=1;num=zi[i];P0=table[num]; //显示一位wei=1;duan=0;n=~k;P0=n;wei=0;k=k<<1; //左移取反If(i==5){ k=0x01h;} //位循环使能,共6个delay();}}}void time0_int(void) interrupt 1 //定时器1中断函数{TH0=0XD8;TL0=0XF0; //定时工作方式1,需要重新装入初值i++;if(i==100) //1000ms,second+1{i=0;s++;}}void int0() interrupt 0 //外部中断0函数{flag=flag%2;if(flag==0) TR0=0; //按偶数次,计数暂停if(flag==1) TR0=1; //按奇数次,计数启动}void int1() interrupt 2 //外部中断1函数,清零{h=m=s=i=0;}。

相关主题