历史上的今天
返回首页

历史上的今天

今天是:2025年01月12日(星期日)

2018年01月12日 | 智能家居控制系统VB上的代码

2018-01-12 来源:eefocus

#include  
#include  
#include      

#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-延时量 
** 
** 输 出: 无 
**          
** 全局变量: 无 
** 调用模块: 无 

**------------------------------------------------------------------------------- 
*********************************************************************************/ 
void LcdDelay(uint8 times) 

    while(times--); 


/******************************************************************************* 
** 函数名称: ReadLCDCR 
** 功能描述: 读LCD命令寄存器 
** 
** 输 入: 无 
** 
** 输 出: (uint8) 读到的数据 
**          
** 全局变量: 无 
** 调用模块: LcdDelay 

*********************************************************************************/ 
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 

*********************************************************************************/ 
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 

*********************************************************************************/ 
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 
** 
*********************************************************************************/ 
void Test_LCDBF(void) 

      uint8 temp,ErrorTime; 

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


/******************************************************************************* 
** 函数名称: LCDInit 
** 功能描述: LCD初始化 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量: 无 
** 调用模块: WriteLCDCR 

*********************************************************************************/ 
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 

*********************************************************************************/ 
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中断服务程序 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量:  
** 调用模块: 无 
** 
*********************************************************************************/ 
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中断服务程序 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量:  
** 调用模块: 无 
** 

*********************************************************************************/ 
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(更新频率、相位数据) 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量:  
** 调用模块: 无 

*********************************************************************************/ 
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 
** 功能描述: 主函数 
** 
** 输 入: 无 
** 输 出: 无 
**          
** 全局变量:  
** 调用模块: 无 

*********************************************************************************/ 
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; 
        } 

    } 
}


推荐阅读

史海拾趣

EUPEC [eupec GmbH]公司的发展小趣事

面对未来市场的机遇和挑战,EUPEC制定了明确的发展战略。公司将继续加大技术创新和研发投入力度,推动电力半导体技术的进步和应用拓展。同时,EUPEC还将加强与国际知名企业的合作与交流,不断提升自身的竞争力和影响力。在应对市场变化和挑战的过程中,EUPEC将始终坚持以客户为中心的理念,为客户提供更优质的产品和服务。

请注意,以上故事是基于EUPEC公司的发展历程和相关信息进行概括和编写的,并非完全基于事实的直接叙述。如需更详细和准确的信息,请参考相关官方资料或新闻报道。

集创北方(CHIPONE)公司的发展小趣事

凭借在显示芯片领域的卓越表现,集创北方获得了众多行业殊荣。公司曾荣获工信部“制造业单项冠军示范企业”称号、北京市专精特新“小巨人”企业等荣誉。这些荣誉的获得不仅是对集创北方技术实力的认可也是对公司未来发展的期许。

以上五个故事简要概述了集创北方在电子行业发展的历程和成就,展示了公司不断创新、积极进取的精神风貌。

EPCOS/TDK公司的发展小趣事

TDK,一个历史悠久的电子工业品牌,其创始人加藤与五郎和武井武两位博士于1935年在东京创办了东京电气化学工业株式会社(Tokyo Denkikagaku Kogyo K.K.),后更名为TDK株式会社。公司自创立之初就致力于磁性材料的研发,并成功地将铁氧体磁芯商业化,为收音机等产品提供了优质的音频解决方案。TDK不断推动技术创新,逐步扩展至数据存储、电子元器件等领域,并以其卓越的品质和技术赢得了全球客户的信赖。

Advanced Semiconductor, Inc.公司的发展小趣事

随着科技的快速发展,ASI不断加大对研发的投入,努力突破技术瓶颈。在某一时期,公司成功研发出一款具有划时代意义的半导体芯片,这款芯片不仅性能卓越,而且功耗更低,极大地提升了电子设备的性能和使用体验。这一技术突破使得ASI在市场上获得了更多的份额,并奠定了公司在半导体行业的领先地位。

Global Specialties公司的发展小趣事

在电子技术的不断推动下,Global Specialties始终保持对新技术的高度敏感。公司不断投入研发资源,对现有产品进行升级换代,并推出了一系列具有创新性的新产品。例如,公司开发的智能测试仪器能够自动完成复杂的测试任务,大大提高了测试效率和准确性。这些技术创新不仅巩固了Global Specialties在业内的领先地位,还为公司带来了更多的商业机会。

埃派克森微电子(Apexone)公司的发展小趣事

2005年,埃派克森微电子发布了一系列USB鼠标控制器芯片,这些产品采用了公司独创的无晶振鼠标控制技术和对管免调技术。这些专利性的混合信号集成核心技术不仅为全球鼠标生产厂商提供了高性价比、简单方便的解决方案,还标志着埃派克森的专利技术全面进入商用时代。这一突破不仅提升了公司的市场地位,也为公司的后续发展注入了强大动力。

问答坊 | AI 解惑

怎样才能学好电子技术

怎样才能学好电子技术   这个问题很大,解决这个问题是一个系统工程,首先需要时间,还要多看书和多实践。   电子技术、无线电维修技术绝不是一门容易学好、短时间内能够掌握的科学。由于这门科学所涉及的方方面面很多,各方面又相互 ...…

查看全部问答>

频谱分析仪的正确使用 

首先,对于频谱仪来说电源是非常重要的,在给频谱仪加电之前,一定要确保电源接法正确,保证地线可靠接地。频谱仪配置的是三芯电源线,开机之前,必须将电源线插头插入标准的三相插座中,千万不要使用没有保护地的电源线,以防止可能造成的人身伤害 ...…

查看全部问答>

急求verilog lcd1602 驱动程序?

急求verilog lcd1602 驱动程序? 谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!…

查看全部问答>

求助:wince socket 蓝牙编程中怎样用OBEX协议封装数据

我是刚接触蓝牙开发的,最近要做一个蓝牙文件传输的应用,就是实现蓝牙设备之间的文件传输, MSDN上研究过SOCKET实现的API函数,但是不知道连接成功后发送的数据怎样才能让对方识别, 网上有人说\"这些数据必须是经过OBEX协议封装好的数据\" 请做过这 ...…

查看全部问答>

mount 不上

root@arago:/# mount /dev/mtdblock4 /mnt/aaa/ mtdblock_open ok mtdblock: read on \"filesystem\" at 0x0, size 0x200 end_request: I/O error, dev mtdblock4, sector 0 FAT: unable to read boot sector mtdblock_release nand_sync: c ...…

查看全部问答>

USART配置无论奇或偶校验只有奇校验能用有图。。。。

无校验时收发正常 看了下手册 添加校验的话 要M=1(9BIT ) PCE =  1 PS = 0/1  奇偶作为9bit里的MSB发送 都配置好了以后 用串口调试助手调试 无论怎么配置只有选odd 才能正常发送接收 囧。。。 odd.JPG (7 ...…

查看全部问答>

2.8寸液晶成功在MINISTM32板子上驱动成功!

先上图,看看效果   再来个液晶屏的背面图 [ 本帖最后由 jiaxinhui2011 于 2011-7-8 07:05 编辑 ]…

查看全部问答>

【视频分享】 TI OMAP 5处理器平台强大的图形能力演示

简介:通过业界知名的GL Benchmark 2.5的测试,TI OMAP 5处理器平台具有强大的图形能力,领先目前市场最领先的平板电脑12%左右,同时也领先与其它竞争对手的处理器平台。   $(\'swf_dN8\').innerHTML=AC_FL_RunContent(\'width\', \'550\', ...…

查看全部问答>

开关电源上各个电子元件的作用

你想了解开关电源上各个电子元件的作用?…

查看全部问答>

微分积分电路低通高通区别分析

看这题目,肯定好多人需要吧???…

查看全部问答>