51单片机入门实验及示例程序.docVIP

  • 153
  • 0
  • 约6.56千字
  • 约 13页
  • 2017-05-21 发布于浙江
  • 举报
51单片机入门实验及示例程序

实验题 由按键S1产生外部中断1,S1按一次L0、L2、L4、L6亮,再按一次L1、L3、L5、L7亮。 由按键S1产生外部中断1控制T0启停,T0产生100ms定时,使4个数码管循环显示0中的一段,每段显示时间为1S。 T1工作于方式2,产生250uS精确定时,产生0~9秒计时,并显示在数码管上。 串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的任何字符,都立刻转发给PC。 串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的‘0’~‘9’,回送0~9,当收到‘a’~‘z’时回送‘A’~‘Z’。 串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的‘1’,回送字符串“Start”,并启动T0产生1S的方波控制L0~L7闪烁,当收到‘2’时回送字符串“Stop”,并停止控制L0~L7。 串口工作于方式1,波特率为9600bps,当单片机收到PC机串口发来的‘Start’,回送字符串“Ok1”,并启动T0产生1S的方波控制L0~L7闪烁,当收到‘Stop’时回送字符串“Ok2”,并停止控制L0~L7。 当S1工作于独立按键方式时(需考虑按键抖动,软件滤波),按第1次,L0~L3以0.5秒为周期闪烁,串口以9600bps波特率发送字符‘1’一次,按第2次,L4~L7以1秒为周期闪烁,串口以9600bps波特率发送字符‘2’一次,按第3次,L0~L7以2秒为周期闪烁,串口以9600bps波特率发送字符‘3’一次。再按一次回到第一次的模式,如此循环。 本人自己写的示例程序,验证可用,仅供参考学习用: 附部分原理图: 1、 #includereg52.h #define uchar unsigned char #define uint unsigned int sbit P33=P3^3; sbit P35=P3^5; bit flag=1; void delay_115(int x) //延时函数 { int i,j; for(i=x;i0;i--) for(j=110;j0;j--); } void main() { EA=1; //中断总允许位 IT1=0; //设置外部中断1的触发方式为电平触发 EX1=1; //开外部中断 P35=0; P1=0xaa; //初始化P1,方法二中必须写这句 while(1); } void t1_115() interrupt 2 { /* delay_115(20); //按键消抖 while(!P33); //当松开按钮时程序才往下执行,否则一直停留在此处 delay_115(20); //按键消抖 */ //方法一: /* if(P1==0x55) P1=0xaa; else P1=0x55; */ //方法二:(若使用方法二则给P1初始化为0xaa或0x55) // P1=~P1; //取反 if(P33==0) { delay_115(15); if(P33==0) { if(flag) { P1=~P1; flag=0; } } else { // key=0; flag=1; } } else { // key=0; flag=1; } } 2、 #includereg52.h #define uchar unsigned char #define uint unsigned int sbit P33=P3^3; sbit P35=P3^5; uchar count_115=0; void delay_115(int x) //延时函数 { int i,j; for(i=x;i0;i--) for(j=110;j0;j--); } void main() { uchar temp_115=0xfe; EA=1; //中断总允许位 TMOD=0x01; //设置T0的工作方式为方式1 IT1=0; //设置外部中断1的触发方式为电平触发 EX1=1; //开外部中断 ET0=1; //开定时器T0 TR0=1; //定时器T0启动 TH0=0x3C; //设置初值 TL0=0xB0; P35=0; P0=0x10; //打开4位数码管 while(1) { if(count_115==20) /

文档评论(0)

1亿VIP精品文档

相关文档