毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

单片机智能电子温度计设计(电路图+原理图+源代码) 第7页

更新时间:2010-4-30:  来源:毕业论文
单片机智能电子温度计设计(电路图+原理图+源代码) 第7页
/**********************************************/
/*键盘扫描函数
/**********************************************/
void keyscan(void)
{
 uchar data m;
 if(K1==0)                                         //K1设置键
 {
    for(m=0;m<100;m++)                     //延时11ms
       display();
    if(K1==0)
    {
       beep2();                                      //按键时响一声      
       set_flag=!set_flag;                        //设置标志位取反
     }
   }
 if(set_flag==1)                                   //若设置键按下,则检测K2-K4
 {
     SET_IND=0;                                 //设置灯亮
     if(K2==0)                                      //K2:十位加1
    {
       for(m=0;m<100;m++)                  //延时11ms
          display();   
       if(K2==0)
       {
          beep2();                                   //按键时响一声      
          set_data[2]++;
         if(set_data[2]==5) set_data[2]=0;
       }
   }
   if(K3==0)                                       //K3:个位加1
   {
      for(m=0;m<100;m++)                  //延时11ms
         display();   
      if(K3==0)
     {
         beep2();                                    //按键时响一声      
         set_data[1]++;
         if(set_data[1]==10) set_data[1]=0;
     }
   }
   if(K4==0)                                        //K4:小数位加1
   {
       for(m=0;m<100;m++)                  //延时11ms
       display();
       if(K4==0)
       {
          beep2();                                   //按键时响一声      
          set_data[0]++;
          if(set_data[0]==10) set_data[0]=0;
        }
   }
  }
  else SET_IND=1;
}

/**********************************************/
/*显示函数
/**********************************************/
void display(void)
{
    if(set_flag)                                         //设置键按下,则显示设置的数值
    {
         dis_buf[0]=set_data[0];
         dis_buf[1]=set_data[1];
         dis_buf[2]=set_data[2];
    }
    else
    {                                                       //否则显示温度值    
       dis_buf[0]=bcd_buf[0];
       dis_buf[1]=bcd_buf[1];
       dis_buf[2]=bcd_buf[2];
     }
     P1 = 0xff;               // 先关闭所有数码管

     P1 = dis_code[dis_buf[0]];              // 小数显示代码传送到P1口
     select2=1;select1=1;select0=0;            // 位选
     delay1ms(1);                                     //延时1ms
     P1 = dis_code[dis_buf[1]];              // 个位显示代码传送到P1口
     select2=1;
     select1=0;select0=1;
     P17=0;
     delay1ms(1);                                     //延时1ms
     P1 = dis_code[dis_buf[2]];             // 十位显示代码传送到P1口
     select2=0;select1=1;select0=1;      
     delay1ms(1);                                    //延时1ms
}
/**********************************************/
/*串口发送一个字符函数
/**********************************************/
void send_str(void)
{
   SBUF = ad_data;                                 //串口发送AD转换温度值
   while(TI==0);              // 等待数据传送
   TI = 0;               // 清除数据传送标志
}
/**********************************************/
/*主函数
/**********************************************/
void main(void)
{
   TMOD = 0x21;              // 定时器1工作于方式2,8位自动重载模式, 用于产生波特率
                                             // 定时器0工作于方式1,产生1s的AD间隔时间
   TH0=15536/256;                                 //T0定时50ms
   TL0=15536%256;
   TH1 = 0xe1;              // 波特率1000
   TL1 = 0xe1; 
   SCON = 0x50;              // 设定串行口工作方式1
   PCON = 0x00;              // 波特率不倍增
   TI=0;                                                 //清除发送中断标志
 
   www.youerw.com                 // 启动T1
   TR0 = 1;                                             //启动T0
    while(1)
    {
       display();
       keyscan();
       if(TIMER0_flag)
       {
          TIMER0_flag=0;
           adc();
           BCD();
           send_str();
         }
     }
}

/**********************************************/
/*T0中断服务程序
/*每秒钟ADC一次,串口发送一次
/**********************************************/
void timer0(void) interrupt 1
{
  TH0=15536/256;                                     //重装初值
  TL0=15536%256;
  TIMER0_NUM++;
  if(TIMER0_NUM==20)
  {
     TIMER0_NUM=0;
     TIMER0_flag=1;
  }
}
时间的程序:
ORG     0000H
                AJMP    MAIN    ;转到系统初始化程序

                ORG     000BH
                AJMP    PITO    ;转到定时器0中断服务程序

                ORG     0100H
          MAIN: MOV     SP,     #60H  ;确立堆栈区
                MOV     TMOD,   #01H  ;设定定时器0为工作方式1
                MOV     TL0,    #0DCH  ;装计数器初值
                MOV     TH0,    #0BH
                CLR     21H.0
                CLR     TR0H    ;TR0置“0”,定时关闭
                SETB    EAH     ;EA置“1”,中断总允许
         SETB    ET0H              ;ET0置“1”,定时器0中断
                                    允许
                MOV     30H,    #10H  ;循环次数

上一页  [1] [2] [3] [4] [5] [6] [7] 

单片机智能电子温度计设计(电路图+原理图+源代码) 第7页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。