qeilf

博客园 首页 新随笔 联系 订阅 管理
  11 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

2011年9月8日 #

一、Keil环境的准备

软件下载地址:http://115.com/file/a203u22

默认的安装目录,INC文件夹

image

二、简单示例

基本流程

1、新建一个工程

image

需要说明的是,需要选择工程编译出来的目标设备,这里选择ATMEL公司的MCS-51

ATMEL基本介绍:http://baike.baidu.com/view/1190523.htm

2、新建一个文件,扩展名为c,如main.c

3、将main.c文件添加到工程中

4、编写代码

(1)实现全亮和全灭

#include <reg51.h>

 

void sleep(int ms)
{
    int i;

    ms=ms*10;
    for(;ms>0;ms--)
    {
        for(i=0;i<124;i++){}
    }
}

void main()
{

    //低电平亮灯,高电平灭灯
    P1=0x00;
    sleep(1000);
    P1=0xff;
    sleep(1000);
}

(2)流水灯

#include <INTRINS.H>

P1=0xfe;
while(1)
{
     sleep(1000);
    P1= _crol_(P1,1);
}

(3)单独控制灯

sbit P1_0=P1^0;//控制第一个灯

sbit P1_1=P1^1;//控制第二个灯

sbit P1_2=P1^2;//控制第三个灯

sbit P1_3=P1^3;//控制第四个灯

void main()
{

    //低电平亮灯,高电平灭灯

     P1_0!=P1_0;
     sleep(1000);
}

(4)键盘控制灯的亮灭

image

按钮P3.2按下表示低电平,松开表示高电平

现在实现按钮P3.2按下P1.0亮,松开就灭灯

sbit P3_2=P3^2;//控制键盘按键的状态

while(1)

{

    P1_0=P3_2;

}

posted @ 2011-09-08 17:42 chen lei 阅读(5) 评论(0) 编辑

2010年11月8日 #

     一直有一个问题困扰,VS2005用得好好滴,突然有一天开始就进不去了,启动了以后,没有任何界面的出现,但是打开任务管理器,却能够看到进程的存在,真是奇怪了,我试图卸载并且重新安装,但是还是不行,初步判断应该跟VS2005没有关系,莫非是VS2010在捣乱。。。 

     由于工作比较忙就没有去管它,今天上网查了一下,原来是因为安装了虚拟机的原因,    

     解决方法:在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\AddIns\VMDebugger.Connect目录下把LoadBehavior项由1改为0    

     原因:在安装.net2005之后,由于之前的vmvare出现问题,安装了一个版本较新的vmvare,而该版本的vmvare具有给.net添加一个叫做vmdebuger的工具栏,但是vmvare服务没有开启的情况下,启动.net会因为无法加载vmdebuger插件导致加载失败而卡住

posted @ 2010-11-08 18:33 chen lei 阅读(167) 评论(0) 编辑

2008年10月5日 #




/*

#define  _WIN32_WINNT  0x0500
#include <windows.h>
#include <process.h>
#include <stdio.h>

unsigned __stdcall TF(void* arg) { 
HANDLE timer=(HANDLE) arg;
while (1) {
//此处,进程间通信的接收方
//timer是命名的,因此进程间或线程间没有区别
WaitForSingleObject(timer,INFINITE);
printf(".");
}
}

int main(int argc, char* argv[]) { 
//创建,命名为0,也可以是LPCTSTR,字符串
//其他进程可以通过OpenWaitableTimer获得此timer的句柄,并对之进行SetWaitableTimer
HANDLE timer = CreateWaitableTimer(
0,
false, // false=>will be automatically reset
0);    // name 
LARGE_INTEGER li;
const int unitsPerSecond=10*1000*1000; // 100 nano seconds
// Set the event the first time 2 seconds
// after calling SetWaitableTimer
//2秒
li.QuadPart=-(2*unitsPerSecond); 
//通过句柄设置timer
SetWaitableTimer(
timer,
&li,
750,   // Set the event every 750 milli Seconds
0,
0,
false);
//用TF函数启动worker线程
_beginthreadex(0,0,TF,(void*) timer,0,0); 
// Wait forever, 
while (1) ;
return 0;
}


*/




#define _WIN32_WINNT 0x0400
//#include <windows.h>
#include <stdio.h>
#include <afxwin.h>

#define _SECOND 10000000

typedef struct _MYDATA {
TCHAR *szText;
DWORD dwValue;
} MYDATA;


VOID CALLBACK TimerAPCProc(
  LPVOID lpArg,               // Data value.
  DWORD dwTimerLowValue,      // Timer low value.
  DWORD dwTimerHighValue ) {  // Timer high value.
MYDATA *pMyData = (MYDATA *)lpArg;
printf( "Message: %s"nValue: %d"n"n", pMyData->szText,
pMyData->dwValue );
MessageBeep(0);
}


int main( void ) {
/*
HANDLE          hTimer;
BOOL            bSuccess;
__int64         qwDueTime;
LARGE_INTEGER   liDueTime;
MYDATA          MyData;
TCHAR           szError[255];
MyData.szText = "This is my data.";
MyData.dwValue = 100;
if ( hTimer = CreateWaitableTimer(
NULL,                   // Default security attributes.
FALSE,                  // Create auto-reset timer.
"MyTimer" ) ) {         // Name of waitable timer.
__try {
// Create a negative 64-bit integer that will be used to
// signal the timer 5 seconds from now.
qwDueTime = -5 * _SECOND;
// Copy the relative time into a LARGE_INTEGER.
liDueTime.LowPart  = (DWORD) ( qwDueTime & 0xFFFFFFFF );
liDueTime.HighPart = (LONG)  ( qwDueTime >> 32 );
bSuccess = SetWaitableTimer(
hTimer,                 // Handle to the timer object.
&liDueTime,             // When timer will become signaled.
2000,                   // Periodic timer interval of 2 seconds.
TimerAPCProc,           // Completion routine.
&MyData,                // Argument to the completion routine.
FALSE );                // Do not restore a suspended system.
if ( bSuccess ) {
for ( ; MyData.dwValue < 1000; MyData.dwValue += 100 ) {
SleepEx(
INFINITE,           // Wait forever.
TRUE );             // IMPORTANT!!! The thread must be in an
// alertable state to process the APC.
}
} else {
wsprintf( szError, "SetWaitableTimer() failed with Error %d.",
GetLastError() );
MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );
}
} __finally {
CloseHandle( hTimer );
}
} else {
wsprintf( szError, "CreateWaitableTimer() failed with Error %d.",
GetLastError() );
MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );
}


*/


 //创建定时器QQ:9073204 

         HANDLE hTimer = NULL;
         LARGE_INTEGER liDueTime;
 
         //设置相对时间为10秒。
         liDueTime.QuadPart = -100000000;
 
         //创建定时器。
//NULL:是定时器的属性,为默认值;
//True表示是否手动复位,
//最后一个参数是定时器的名字
        hTimer = CreateWaitableTimer(NULL, FALSE, _T("TestWaitableTimer"));
         if (!hTimer)

         {              
               return 1;
         }
 
         //OutputDebugString(_T("10秒定时器"r"n"));
//printf( "Message: %s"nValue: %d"n"n", pMyData->szText,pMyData->dwValue );


printf("10秒定时器"r"n");
 
         // 设置10秒钟。


//定时器的句柄
//定时器开始的时间,为负数就是相对时间,从执行这条语句开始多少秒触发定时器
//定时器的周期
//回调函数
//回调函数的参数
//设置系统是否自动恢复
        if (!SetWaitableTimer(hTimer, &liDueTime, 10000, NULL, NULL, 0))
         {        
               //
               CloseHandle(hTimer);
               return 2;
         }
 
         //等定时器有信号。
         if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
         {
               //OutputDebugString(_T("10秒定时器出错了"r"n"));   
               //
  printf("10秒定时器出错了"r"n");
               CloseHandle(hTimer);
               return 3;
         }
         else
         {
while(1)
{

 
WaitForSingleObject(hTimer, INFINITE);
               //10秒钟到达。
               //OutputDebugString(_T("10秒定时器到了"r"n"));      
  printf("10秒定时器到了"r"n");
}
         }
 
         //
         CloseHandle(hTimer);
         return 0;
  
}
posted @ 2008-10-05 16:45 chen lei 阅读(1109) 评论(0) 编辑

2007年8月29日 #

用Acrobat自带的sdk实现合并pdf文档的。

1、要用这个方法必须在工程中引入Acrobat.tlb这个库文件,这个文件只有在Acrobat 7.0 Professional版本中才有,如果不安装Professional版,这个库文件包括其他安装目录下的dll文件怎么注册也不成功,无法使用,或许有其他的注册方法没有找到,如果要使用,暂时就要安装Professioal版;

2.在C# Windows工程和asp.net工程中是有区别的,在Asp.net中执行到 Acrobat.CAcroApp AcroApp =  new Acrobat.AcroAppClass();提示权限不够,在asp.net中要开启模拟帐户才能调用ocx控件,在config文件中加入一句:<identity impersonate="true" />就可以了,但是随之带来了一个新的问题,开启模拟帐户之后,连接数据库就只能用Windows验证方式了。。

posted @ 2007-08-29 23:49 chen lei 阅读(641) 评论(0) 编辑

2006年5月30日 #

posted @ 2006-05-30 13:45 chen lei 阅读(2310) 评论(1) 编辑

2006年2月16日 #

posted @ 2006-02-16 23:22 chen lei 阅读(181) 评论(0) 编辑

2006年2月10日 #

posted @ 2006-02-10 00:35 chen lei 阅读(285) 评论(0) 编辑

2006年2月7日 #

posted @ 2006-02-07 18:07 chen lei 阅读(1003) 评论(0) 编辑

2006年2月4日 #

posted @ 2006-02-04 17:40 chen lei 阅读(556) 评论(0) 编辑

posted @ 2006-02-04 16:58 chen lei 阅读(654) 评论(0) 编辑