单片机最小系统实验报告

长沙学院

电子工艺实习报告

­­

姓名:        潘舟         

学号:     2009044211     

系别:   电子与通信工程   

时间:  2011.11.14-2011.11.25

专业:    电子信息工程    

指导老师:龙英、刘辉、王新辉、刘亮、马凌云

目录

1引言

2目的

3任务

4要求

5主要原理图

6主要程序

7程序实现的功能

8系统调试

9总结



目的:

通过对单片机最小系统的研究, 掌握单片机各引脚功能,理解单片机工作过程及原理,以及与各种外部扩展器件的连接,能够自己运用单片机来解决实际问题。

任务:

1、单片机实验板的设计与制作

2、声光控延时开光的焊接与调试

要求:

1   1)功能要求

单片机最小系统(晶振、复位电路);

按键输入部分,可以做简单按键输入实验;

键盘输入部分,可做矩阵式键盘扫描输入实验;

RS-232串行接口部分,可进行单片机与计算机通信实验;

LCD显示部分,可做LCD显示实验;

LED数码管显示器部分,可进行定时计数等数据显示实验;

喇叭发音部分,可做单片机发声实验;

LED发光二极管部分,可做基本输出功能实验;

稳压电源部分,可提供5V电源;

2)设计要求

   进行元器件及参数选择;画出电路原理图;PCB图,焊接电路并调试。

3)制作要求

自行装配和调试,并能发现问题和解决问题。

4)程序调试要求

编写秒表程序和彩灯控制程序,利用自己制作的实验板进行程序调试。

2(1)、能实现以下功能:

a、能够实现光控声控控制灯的点亮;

b、能够使灯包点亮后一段时间自动熄灭。

2)设计要求

   进行元器件及参数选择;画出电路原理图;PCB图,焊接电路并调试。

3)制作要求

自行装配和调试,并能发现问题和解决问题。

主要原理图:

主要程序:

   1)编写一程序,达到按键加减的功能。按一下+1键,显示加一,加到255时,显示归零按。按下-1键,显示减1,当减到零时,显示变为255。

     程序:

     #include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

sbit k1=P3^0;

sbit k2=P3^1;

sbit A1=P2^0;

sbit A2=P2^1;

sbit A3=P2^2;

sbit A4=P2^3;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay (uchar j)

{

   uchar i;

   for(i=0;i<100;i++)

   {

     _nop_();

     j--;

   }

}

void xianshi(uchar y)

{

     uchar m,n,x,i;

     m=y%10;

     n=y/10%10;

     x=y/100;

       

     for (i=0;i<4;i++)

     { 

        A1=0;

        P0=table[m];

        delay(1);

        A1=1;

        A2=0;

        P0=table[n];

        delay(1);

        A2=1;

        A3=0;

        P0=table[x];   

        delay(1);

        A3=1;

     }

}

main()

{

   char t;

   P2=0;

   P0=0x80;

   while(1)

   {

     if(k1==0)

     {

        delay(10);

        if(k1==0)

        {

          delay(10);

          while(!k1);

          t++;

          if(t>255)

             t=0;

          xianshi(t);

           }

     }

     if(k2==0)

     {

        delay(10);

        if(k1==0)

        {

          delay(10);

          while(!k1);

          t--;

          if(t<0)

             t=255;

          xianshi(t);

           }

     }   

   }

}

   2)编写程序,实现跑秒功能。

   程序:

   #include<reg51.h>

#define uchar unsigned char

//******************************特殊位定义*******************************

sbit p30=P3^0;

sbit p31=P3^1;

sbit p32=P3^2;

sbit p33=P3^3;

sbit sten=P3^4;   //P3.4用来控制计时器的走与停(复位清零)

sbit storeshow=P3^5;   //p3.4用来存计数与读计数

sbit p37=P3^7;

//*****************存放点量数码管的码(0~9)**************************

uchar code tab1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};    //存放点量数码管的段选码(0~9)

uchar code tab2[4]={0x0fe,0x0fc,0x0fb,0x0f7};      //存放点量数码管的位选码(3~0位)

//********************************变量定义****************************

uchar tab3[10][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};     //预存10个计时

uchar tab4[4]={0,0,0,0};     //用来放四位数即分、十秒、个秒、1/10秒//

uchar n,s,S1,m,k,a;     //定义变量

//****************子程序申明//////////////////

void initT0(void);        //定时器0的初始化

void display1(void);   //数码管显示程序

void display2(void); //显示存入的计时数

void delay5ms(uchar i);     //延时5ms程序

void speak2(void);//按键提示音

void speak(void);//开机提示音

//*************子程序内容///////////////

void speak2(void)//***************************************按键提示音**********************

{

   uchar i;

   for(i=0;i<5;i++)

   {

     p37=0;

     delay5ms(1);

     p37=1;

     delay5ms(1);

   }

}

void speak(void)//*********************开机提示音***********************

{

   uchar i;

   for(i=0;i<5;i++)

   {

     p37=0;

    delay5ms(2);

       p37=1;

     delay5ms(2);

   }

}

void initT0(void) //****************************定时器0的初始化程序、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

{

    TMOD=0x01;

    TH0=0x63;

    TL0=0x0c0;       //定时50ms

    EA=1;

    ET0=1;

    TR0=1;

}

void timer0(void) interrupt 1    //***************************************定时中断程序、、、、、、、、、、、、、、、、、、、、、、

{

   TF0=0;

   TH0=0x63;

    TL0=0x0c0;          //定时50ms

   n++;

   if(n==2)    

   {

     n=0;           //定时中断次数清0 

     s++;         //十分之一秒加1

     if(s==10) //***秒

     {

        s=0;

        S1++;     //秒加1

        if(S1==60)   //***分

        {

          S1=0;

          m++;      //分加1

        }

     }

     tab4[0]=m; //将分存入数组

     tab4[1]=S1/10; //取得秒十位

     tab4[2]=S1%10; //取得秒个位

     tab4[3]=s;

   }

   if(tab4[0]==9&tab4[1]==5&tab4[2]==9&tab4[3]==9)

   {

     speak();

     delay5ms(10);

     speak2();

     TR0=0;

   }

}

void display1(void)//*******************数码管动态显示程序、、、、、、、、、、、、、、、、、、、、、、、、、、、、

{

   uchar i;

   while(1)

   {

        for(i=0;i<4;i++)

     { 

        P3=tab2[i];       //选正位

        P0=tab1[tab4[i]]; //点量对应位的段码

        delay5ms(1);

     }

     if(!sten)

     {

        delay5ms(2);   //消抖

        if(!sten)

        {  k++;

          speak2();//按键提示音

          while(!sten);//等待sten按键释放

          break;  //按sten键k加1 表示停止计时

        }

     }

     if(!storeshow)

     {

        delay5ms(2);   //消抖

        if(!storeshow)

        {

          a++;

          speak2();//按键提示音

          while(!storeshow);//等待按键storeshow释放

          break;  //按storeshow  表示存入一个当前计时数到tab3数组中

        }

     }

   }

}

void display2(void)   // *************************显示存入的计时数、、、、、、、、、、、、、、、、、、、、、、、

{

   uchar i;

   while(1)

   {

     while(1)

     {

        for(i=0;i<4;i++)

        { 

           P3=tab2[i];       //选正位

          P0=tab1[tab4[i]]; //点量对应位的段码

          delay5ms(1);

        }

        if(!storeshow) break;

        if(!sten) break;

     }

     delay5ms(2);//消抖

     if(!sten)

     {

        k++;

        speak2();//按键提示音

        while(!sten);

        break;

     }

     if(!storeshow)

     {

        speak2();//按键提示音

        while(!storeshow);//等待按键storeshow释放

        break;  //打断跳回显示下一个计时数

     }

    }

}

void delay5ms(uchar i) //**********************延时5ms秒程序*、、、、、、、、、、、、、、、、、、、、、、、、

{

   uchar j,f,g;

   for(j=0;j<i;j++)

   {

    for(g=19;g>0;g--)

        for(f=130;f>0;f--);

   }

}

//************************************************************主程序段************************************************

void main()

{

   uchar b;

   speak();//开机提示音

   while(1)

   {

     a=0;

     k=0;

     n=0,s=0,S1=0,m=0;   //变量初始化

     while(sten) ;  //等待开始按键

     delay5ms(2);

     if(!sten)      //按键sten开始

     {

        speak2();//按键提示音

        while(!sten);  //等待按键松开就开始计时

        initT0();     //定时器0初始化开始计时

        while(k==0|k==1)

        {

          display1();    //调用动态显示程序)

          if(k==1)  //按键sten

          {

             TR0=0;  //按键sten  表示关计时

             display1();//按键sten后显示最后计时数

             if(k==1)  //按的是storeshow键 即显示存入计时数(从最后一个开始)

             {

               a--;

               while(a)

               {

                  a--;

                  for(b=0;b<4;b++)

                    tab4[b]=tab3[a][b];    //从tab3数组中取出之前存入的计时数

                    display2();    //显示存入的计时数

               }

             }

          }

          if(k==0&a<=10)    //k=0,按键storeshow表示存入一个当前计时数到tab3数组中

          {

             for(b=0;b<4;b++)           

               tab3[a-1][b]=tab4[b]; //将当前计时数存入tab3数组中

          }

          if(k==2)

          {

             P3=0x0ff;//关位选 (即清显示)


            tab4[0]=0;//清零

             tab4[1]=0;

             tab4[2]=0;

             tab4[3]=0;

             n=0,s=0,S1=0,m=0;//清零

          }

        }

     }

   }

总结:

单片机最小系统经过我一段时间的调试,终于能够达到预定的功能,虽然只是简单的调试,但从中我也接触了不少的关于单片机的知识。此次课程设计让我对单片机有了初步的认识,能够了解单片机工作的模式和具体过程,明白了怎样利用单片机来设计满足自己设定功能的作品,怎样利用单片机来控制系统。同时,这也让我了解到怎样进行单片机编程。掌握了这些就可以在大学期间利用单片机最小系统来拓展功能,制作自己想做的东西,对科研立项等活动有很大的帮助。

声光控延时开关实习报告

一、   实习任务

焊接并调试一声光控延时控制器.

开关选用CD4011集成块为延时电路,选用1A单向进口可控硅以及性能稳定的光敏电阻和优质的驻极体组成的声光控动作电路。

1、能实现以下功能:

a、能够实现光控声控控制灯的点亮;

b、能够使灯包点亮后一段时间自动熄灭。

2、设计要求

进行元器件及参数选择;画出电路原理图;焊接电路并调试。

3、制作要求

自行装配和调试,并能发现问题和解决问题。

二、声光控电路原理

1、设计原理

    220V的市电经过灯泡和全桥整流后一路加在单可控硅MCR100-6上,另一路经过R8限流后给本电路供电。由于一开始可控硅无触发信号,呈关断状态。C3为主滤波电容,四个二极管整流桥给本电路提供稳定工作电压。Q1、R2、R3组成前级电压放大电路,对话筒MIC送来的微弱信号进行放大,然后再送入四个输入与非门CD4011芯片进一步放大,经过C2的正极给其充电,很快C2上就充到了门电路的翻转电压,无光时,当有声音信号时,芯片1高电平,2高电平,则通过R6输出信号为高电平使可控硅导通,点灯点亮。在这个过程中,声音信号只需一个瞬时即可,这是因为,当声音信号来时,C2上得电压很快就充到电源电压,而这时即使声音信号消失,C2只能通过R6进行放电,所以C3上将维持一段时间到电平,这个高电平将维持单项可控硅导通,这就是延时的效果,灯亮后所能延时的长短取决于C2上维持高电平的时间长短,所以选择C2的大小,可以控制延时的长短。当C2上的电压低时,3Y输出高电平,4Y输出低电平,单向可控硅的控制端没了触发信号截止,灯熄灭。有光时,1B输入低电平,不论1A为高低电平,最后4Y输出的是低电平,即可控硅MRC100-6都截止,则灯不亮。

2、原理图如图2-1

 

图2-1

三、操作步骤

1、  拿到制作材料和元件后,首先观察是否齐全并思考没给元件在电路中作用。

2、  测量拿到的元件,测量电阻阻值,三极管的极性。

3、  将原件安装到印刷版上,对元件开始焊接。

4、  对做好的成品进行检测调试。

四、心得体会

通过本次的声光控延时开关制作实习,首先使我知道了楼道间的声控开关是怎样的一个工作原理。然后让我将以前和现在学到的知识都能够灵活的运用起来,使我温故而知新,巩固就知识的同时,又学到了新的知识和技能。最后,通过本次声光控延时实训,我从中得到了许多的乐趣和成功的喜悦。

相关推荐