首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
智能家居控制系统VB上的代码
来源:本站整理  作者:佚名  2011-02-05 21:47:00



#include <REGX51.H>
#include <STRING.H>
#include <INTRINS.H>    

#define TURE 1
#define FALSE 0

#define delayus() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()

/***************************************
**自定义数据类型
***************************************/
typedef unsigned char     uint8;     
typedef unsigned int        uint16;
typedef unsigned long        uint32;

/***************************************
**按键消息结构体
***************************************/
typedef struct         
{
  uint8  handle;          //功能索引
  uint8  assignments;     //键值
  uint8  time;            //键按下的时间

} K_MSG;

/******************************************
** 端口定义
******************************************/
sbit LCD_E        = P2^7;    
sbit LCD_RW        = P2^6;
sbit LCD_RS        = P2^5;
sbit TLED        = P2^4;
sbit Uout        = P3^7; 
sbit Bell        = P2^0;
       

sfr LCD_DOUT         =    0x80;
sfr key_interface    =    0x90;

/******************************************
** 全局变量
******************************************/
K_MSG kmsg;

bit DisplayUpdataFlag,ClICk_Flag, BellingFlag, MeasureFlag, DelayFlag, MeaDelayExt;

uint8 T0_IRQ_Times, ShowPage, obscure, PulseCoun, MeaDelayTime;

uint8 DisplayBuff[33];

uint8  RevTimeH;
uint16 RevTimeL;
uint32 RevTime;

uint8 code TestString[]={"www.huayimcu.com"};

/******************************************************************************/
/*******************************************************************************
** 函数名称: LcdDelay
** 功能描述: LCD控制时序用到的延时程序
**
** 输 入: times-延时量
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 
** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void LcdDelay(uint8 times)
{
    while(times--);
}

/*******************************************************************************
** 函数名称: ReadLCDCR
** 功能描述: 读LCD命令寄存器
**
** 输 入: 无
**
** 输 出: (uint8) 读到的数据
**         
** 全局变量: 无
** 调用模块: LcdDelay
**
** 作 者: 
** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
uint8 ReadLCDCR(void)
{
      uint8 byte;

      LCD_RS = 0;
      LCD_RW = 1;
      LCD_E = 1;
      LcdDelay(4);
      byte = LCD_DOUT;
     LCD_E = 0;
      return(byte);
}

/*******************************************************************************
** 函数名称: WriteLCDCR
** 功能描述: 写LCD命令寄存器
**
** 输 入: (uint8 thdata) 将要写进寄存器的数据
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: LcdDelay
**
** 作 者: 
** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void WriteLCDCR(uint8 thedata)
{
      LCD_DOUT = thedata;
      LCD_RS = 0;
      LCD_RW = 0;
      LCD_E = 1;
      LcdDelay(4);
      LCD_E=0;
}
/*******************************************************************************
** 函数名称: WriteLCDDR
** 功能描述: 写LCD数据寄存器
**
** 输 入: (uint8 thedata) 将要写进寄存器的数据
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: LcdDelay
**
** 作 者: 
** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void WriteLCDDR(uint8 thedata)
{
      LCD_DOUT = thedata;
      LCD_RS = 1;
      LCD_RW = 0;
      LCD_E = 1;
      LcdDelay(4);
      LCD_E = 0;
}

/*******************************************************************************
** 函数名称: Test_LCDBF
** 功能描述: 检测LCD忙标志
**
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: ReadLCDCR
**
** 作 者: 
** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void Test_LCDBF(void)
{
      uint8 temp,ErrorTime;

    ErrorTime = 0xff;
      do
      {
            temp = ReadLCDCR();
        ErrorTime--;
        if(ErrorTime == 0)
            break;
      }
      while(temp & 0x80);
}

/*******************************************************************************
** 函数名称: LCDInit
** 功能描述: LCD初始化
**
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: WriteLCDCR
**
** 作 者: 
** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void LCDInit(void)
{
    uint8 code custom_character[8][8] = 
    {/*自定义5X8字符*/
     0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*自定义字符1*/
     0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,/*自定义字符2*/
     0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,/*自定义字符3*/
     0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,/*自定义字符4*/
     0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,/*自定义字符5*/
     0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,/*自定义字符6*/
     0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,/*自定义字符7*/
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f /*自定义字符8*/
    };

    uint8 i,j;

      Test_LCDBF();
    WriteLCDCR(0x38);
      for(i=0x20; i>0; i--);
        for(j=0xff; j>0; j--);
      Test_LCDBF();
      WriteLCDCR(0x38);
    for(i=0x20; i>0; i--);
        for(j=0xff; j>0; j--);
    Test_LCDBF();
    WriteLCDCR(0x38);
    for(i=0x20; i>0; i--);
        for(j=0xff; j>0; j--);
    Test_LCDBF();
      WriteLCDCR(0x06);
      Test_LCDBF();
      WriteLCDCR(0x0c);
    Test_LCDBF();
    WriteLCDCR(0x01);
      
    Test_LCDBF();
    WriteLCDCR(0x40);
    for(i=0; i<=7; i++)
    {
        for(j=0; j<=7; j++)
        {
            Test_LCDBF();
            WriteLCDDR(custom_character[i][j]);
        }
    } 
}

/*******************************************************************************
** 函数名称: LCDDisplay
** 功能描述: LCD上显示字符串
**
** 输 入: *string(指向字符串地址),position(显示位置)
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: WriteLCDCR,WriteLCDDR,Test_LCDBF
**
** 作 者: 
** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void LCDDisplay(uint8 *string,uint8 position)
{
       Test_LCDBF();
    WriteLCDCR(position);
       while(*string != ’#’)
       {
         if(position == 0x90)
         {
            Test_LCDBF();
            WriteLCDCR(0xC0);
            position = 0xC0;

         }
         /*if(*string == ’\0’)
             *string = ’ ’;     */
         Test_LCDBF();
        WriteLCDDR(*string++);
         position++;
        if(position > 0xCF)
        {
            Test_LCDBF();
            WriteLCDCR(0x80);
            position = 0x80;
        }
       }
}

/*******************************************************************************
** 函数名称: Timer0_IRQ
** 功能描述: 定时器0中断服务程序
**
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 
** 调用模块: 无
**
** 作 者: 
** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void Timer0_IRQ(void) interrupt 1 using 1
{
    TH0 = 0x3c;
    TL0 = 0xa8;
    if(++T0_IRQ_Times > 20)
    {
        T0_IRQ_Times = 0;
        Click_Flag = ~Click_Flag;
        //DisplayUpdataFlag = 1;
    }
    if(DelayFlag)
    {
        if(++MeaDelayTime > 10)
        {
            MeaDelayTime = 0;
            DelayFlag = 0;
            MeaDelayExt = 1;
        }
    }
}

/*******************************************************************************
** 函数名称: Timer0_IRQ
** 功能描述: 定时器1中断服务程序
**
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 
** 调用模块: 无
**
** 作 者:

** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void Timer1_IRQ(void) interrupt 3 using 2
{
    RevTimeH++;
}

void IRQ_int0() interrupt 0 using 2  //INT1中断服务程序,使用第二组寄存器
{
    EX0 = 0;        
    TR1 = 0;    

    RevTimeL = 256 * TH1 + TL1;
    RevTime = RevTimeH * 65536 + RevTimeL;
    if(RevTime < 1000)
    {
        BellingFlag = 1;
    }
    else
    {
        BellingFlag = 0;    
    }
    DisplayUpdataFlag = 1;    
    TH1 = 0;
    TL1 = 0;
}

/*******************************************************************************
** 函数名称: Updata_AD9850
** 功能描述: 更新AD9850(更新频率、相位数据)
**
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 
** 调用模块: 无
**
** 作 者:** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void UpdataLCD(void)
{
    uint8 temp8;
    uint32 teMP32;

    temp32 = RevTime;
    DisplayBuff[16] = temp32 / 100000 + 48;
    temp32 %= 100000;
    DisplayBuff[17] = temp32 / 10000 + 48;
       temp32 %= 10000;
    DisplayBuff[18] = temp32 / 1000 + 48;
       temp32 %= 1000;
    DisplayBuff[19] = temp32 / 100 + 48;
    temp32 %= 100;
    DisplayBuff[20] = temp32 / 10 + 48;
       temp8 = temp32 % 10;
    DisplayBuff[21] = temp8 + 48;
    LCDDisplay(DisplayBuff,0x80);    
}

/*******************************************************************************
** 函数名称: main
** 功能描述: 主函数
**
** 输 入: 无
** 输 出: 无
**         
** 全局变量: 
** 调用模块: 无
**
** 作 者: 
** 日 期: 2007年4月19日
**-------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------
*********************************************************************************/
void main(void)
{
    //uint8 i;

    TMOD     = 0x11;
    EA         = 1;
    ET0     = 1;
    ET1     = 1;
    IT0     = 1;
    TR0         = 1;    

    LCDInit();
    strcpy(DisplayBuff,TestString);
    DisplayBuff[32] = ’#’;
    DisplayUpdataFlag = 1;
    MeaDelayExt = 1;
    while(1)
    {
        TLED = Click_Flag;
        if(DisplayUpdataFlag)
        {
            DisplayUpdataFlag = 0;
            UpdataLCD();
            MeasureFlag = 1;
        }
        if(MeasureFlag && MeaDelayExt)
        {
            RevTimeH = 0;
            RevTimeL = 0;
            RevTime  = 0;
            IE0 = 0;
            TF1 = 0;
            EX0 = 1;
            TR1 = 1;
            for(PulseCoun = 0; PulseCoun<10; PulseCoun++)
            {
                Uout = ~Uout;
                delayus();
            }
            MeasureFlag = 0;
            MeaDelayExt = 0;
            DelayFlag = 1;
        }
        if(BellingFlag)
        {
            Bell = 0;
        }
        else
        {
            Bell = 1;
        }

    }
}

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:52,750.00000 毫秒