We read the world wrong and say that it deceives us.

用结构描述的VHDL方法实现半加器

使用行为描述的方法实现半加器是非常简单的,可是你尝试过用行为描述实现半加器嘛?我们的数字逻辑盛建伦老师就布置了这样的一个实验,代码如下:

-- 底层实体 And_Gate
library ieee;
use ieee.std_logic_1164.all;
entity and_gate is
port(op1,op2:in std_logic;
     and_result:out std_logic);
end and_gate;
architecture behave of and_gate is
begin
  and_result<=op1 and op2;
end behave;
 
-- 底层实体 Or_Gate
library ieee;
use ieee.std_logic_1164.all;
entity xor_gate is
port(op1,op2:in std_logic;
     xor_result:out std_logic);
end xor_gate;
architecture behave of xor_gate is
begin
  xor_result<=op1 xor op2;
end behave;
 
-- 顶层设计实体 h_adder
library ieee;
use ieee.std_logic_1164.all;
entity h_adder is
port(a1,a2:in std_logic;
     s,c:out std_logic);
end h_adder;
architecture struct of h_adder is
signal b1,b2:std_logic;
component and_gate
  port(op1,op2:in std_logic;
       and_result:out std_logic);
end component;
component xor_gate
  port(op1,op2:in std_logic;
       xor_result:out std_logic);
end component;
begin
  G1:and_gate port map
	(op1=>a1,
	 op2=>a2,
	 and_result=>c);
  G2:xor_gate port map
	(op1=>a1,
	 op2=>a2,
	 xor_result=>s);
end struct;

Quartus II 8.1 (32-Bit) 编译仿真通过。

Vista及Win7 恢复“恢复打开此类文件前总是询问”

删除注册表中“HKEY_CURRENT_USERSoftware MicrosoftWindowsShellAttachmentExecute{0002DF01-0000-0000- C000-000000000046}”下不需要下载自动打开的文件类型即可。

当然 这里Kaisir也提供一个注册本脚本,可以清空所有下载自动打开的文件类型。

点此下载:恢复打开此类文件前总是询问

山东最新无线电中继列表(2010.10更新)

区域     接收      下差      亚音              备注

济南
439.750    5        88.5
438.600    5
466.400    10
438.550    5.5                  数字反向226或411
439.750    5        88.5
438.600    5
439.750    5
438.550    5        88.5
淄博
439.050    5        88.5                沂源鲁山,1108米
439.650    5
438.800    5
439.825    5       88.5
淄川
439.625    5
博山
439.900    5 继续阅读 »

2010 - 10 - 24技术宅男

6条评论
602 views

很有趣的一道C语言题

题目要求不允许改变main()函数,只能通过在test()函数中写代码来改变yy的值~~

void test(void)
{
 
//在这写代码
 
}
 
void main()
 
{
	int yy=1;
	test();
	printf("%d",yy);
}

哈哈 当时看了这个题就觉得特别好玩 看了大家的回答更发现自己了解的知识还真是还有很大的欠缺哈 高人太多啦 哈哈哈哈~~~突然又很有奋斗的动力~~为成为计算机很NB的人而努力奋斗哈哈~~

附上几个参考答案,VC++ 6 编译通过。

答案一:

void test(void)
{
	int *p;
	p=(int *)&p;
	while (*p!=1)
 
	{
		p++;
	}
	*p=88888888;
}

(PS:这是出题者自己公布的答案)

答案二:

void test(void)
{
	#define yy 9999
	#define int /##/##int
}

(PS:这个很赖皮的说~~哈哈)

答案三:

void test(void)
{
	_asm
	{
		push ebp
		mov ebp,[ebp]
		mov dword ptr[ebp-4],0x00000003 //这个0x00000003就是覆盖了y的值
		pop ebp
	}
}

(PS:我认为这是很标准的一个答案。)

红警Windows7联机补丁

在Vista以上的版本中,微软取消了IPX协议,这对于想联机玩类似红警等老游戏的玩家却是很大的损失哇。Kaisir在网上找了很多IPX协议,都不能让Win7正常支持这个,最后找到了一个协议转发的小dll.文件。

点击下载:ts_ra2_lanpatch_1_00

只需把这个dll文件复制到红警根目录下 就Ok了哈~~至于原理,我会在有时间的时候,给大家做简单的分析哈~~

简述Win7 Xp Mode

Windows 7 推出已经有很长的一段时间了,相比有很多人都在用这个操作系统了吧。虽然初期有这样那样的问题,可是慢慢的,这些问题也都在微软跟世界各地“牛人”的帮助下渐渐的被修复了哈~~今天Kaisir不是来给Windows 7打广告的,今天我要给大家讲述一个很有用,但是可能你不知道怎么用Windows 7的功能——Xp Mode。

所谓Xp Mode,顾名思义,就是在Windows 7的环境下虚拟了一个Windows Xp的运行环境,让不兼容Win 7的程序可以正常运行。当然也许你会问,遇到这个兼容性问题我完全可以用虚拟机解决哇,那Xp Mode跟虚拟机又有什么区别呢?其实从本质上来讲,Win 7的 Xp Mode就是基于Windows VPC虚拟化技术的应用。不过,这个Xp Mode可以跟系统无缝结合哈~~上个图给大家看看先:

看到图中我划线的部分了么?我在Xp Mode中安装了的程序都会直接在Win 7的开始菜单中显示出来,而且可以直接在Win7环境下运行~~这个功能是不是很赞~一般的虚拟机做不到了吧~~:)

好了,费了那么多口水介绍Xp Mode,这个Xp Mode该怎么启用呢?很简单咯,首先 狂点此链接 打开Windows Virtual PC 页面,在打开的窗口中点击写带有“立即获取”这个字样的按钮:

在随后打开的窗口中选择你的Win7的版本及语言。很遗憾的,只有专业版以上版本才能使用这个Xp Mode哈~~

当然,如果你跟我一样怕麻烦~你可以直接单击下面的链接下载(Win7 旗舰版 64位):

1.Windows Xp Mode

2.Windows Virtual PC

下载完毕就是安装的过程咯,先安装Windows Xp Mode 请注意不要安装在系统盘~因为这东西实在是大,安装在系统盘可能会拖慢系统的速度。安装过程中会让你选择安装路径,此时,需要记住这个路径。

安装完Xp Mode以后就可以安装Windows Virtual PC 咯,在这个的安装过程中,会让你选择你刚刚安装的Xp Mode的位置,选中你的位置就好啦~~

其他过程中也没有什么我觉得需要特别说明的东西啦 ~~详情可以 看这里

Enjoy Yourself!

2010 - 10 - 20技术宅男

没有评论
147 views

如何在复制网页内容的时候增加版权信息

今天给山青院使用的CMS增加防复制及复制增加版权的功能,找到了一段JS代码,感觉挺不错的,特记录下来,备用:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>复制页面文字时,增加版权信息的功能</title>
</head>
<body>
将这段文字复制后,在其他地方粘贴你就能看到自动加入的文字
<script type="text/javascript">
document.body.oncopy = function () {
setTimeout( function () {
	var text = clipboardData.getData("text");
	if (text) {
		text = text + "n----本文来源自:Kaisir的部落格 http://www.kaisir.com";
		clipboardData.setData("text", text);
		}
	}, 100 )
}
</script>
</body>
</html>

不过很可惜的,这段代码对FireFox无效~

此外,如果想要在JS中进行引号嵌套,则需要使用双重引号~~”"->”

华硕F81Se镶牙

没有蓝牙终究是不方便的,今天终于拿到了从淘宝上购买的BT-183的蓝牙模块,加上运费一共57元~~算算还是很划算的啊。既然拿到了蓝牙模块,就开始给华硕F81Se增加蓝牙咯~~

安装的办法很简单,先上张图吧,说明下F81Se蓝牙的位置。

既然知道了蓝牙的位置,发现蓝牙在很靠近边缘的地方,所以我们就可以用一种很巧妙的拆机方法来安装蓝牙,即只拆解需要的部分即可,如图:

只拆掉图中圆圈标注处的6颗螺丝即可~~就可以把掌托部分掀开一个小缝(你要相信笔记本外壳材料的韧性…不过也别掀太大 吼吼),就能看到蓝牙的8针接口啦 插入蓝牙模块,搞定~~

我买的BT183模块在Win7下可以自动完成驱动安装,不需要其他驱动咯~~

2010 - 10 - 12技术宅男

1条评论
2,264 views

黑客帝国数字雨 VC6源代码

很不错的效果 这个在Win7 X64 VC6编译通过~~

代码原作者不详。

#include <windows.h> 
 
#define ID_TIMER    1
#define STRMAXLEN  25 //一个显示列的最大长度
#define STRMINLEN  8  //一个显示列的最小长度 
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
typedef struct tagCharChain //整个当作屏幕的一个显示列,这是个双向列表
{
        struct tagCharChain *prev; //链表的前个元素
        TCHAR  ch;                  //一个显示列中的一个字符
        struct tagCharChain *next; //链表的后个元素
}CharChain, *pCharChain; 
 
typedef struct tagCharColumn
{
        CharChain *head, *current, *point;
        int x, y, iStrLen; //显示列的开始显示的x,y坐标,iStrLen是这个列的长度
        int iStopTimes, iMustStopTimes; //已经停滞的次数和必须停滞的次数,必须停滞的次数是随机的
}CharColumn, *pCharColumn; 
 
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
        static TCHAR szAppName[] = TEXT ("matrix") ;
        HWND            hwnd ;
        MSG            msg ;
        WNDCLASS    wndclass ; 
 
        wndclass.style                = CS_HREDRAW | CS_VREDRAW ;
        wndclass.lpfnWndProc        = WndProc ;
        wndclass.cbClsExtra        = 0 ;
        wndclass.cbWndExtra        = 0 ;
        wndclass.hInstance        = hInstance ; 
 
wndclass.hIcon                = LoadIcon (NULL, IDI_APPLICATION) ;
        wndclass.hCursor        = LoadCursor (NULL, IDC_ARROW) ;
        wndclass.hbrBackground        = (HBRUSH) GetStockObject (BLACK_BRUSH) ;
        wndclass.lpszMenuName        = NULL ;
        wndclass.lpszClassName        = szAppName ; 
 
        if(!RegisterClass (&wndclass))
        {
            MessageBox (NULL, TEXT ("此程序必须运行在NT下!"), szAppName, MB_ICONERROR) ;
            return 0;
        } 
 
        hwnd = CreateWindow (szAppName, NULL,
                            WS_DLGFRAME | WS_THICKFRAME | WS_POPUP,
                            0, 0,
                            GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),
                            NULL, NULL, hInstance,
                            NULL) ; 
 
        ShowWindow (hwnd, SW_SHOWMAXIMIZED) ; //最大化显示
        UpdateWindow (hwnd) ;
        ShowCursor(FALSE); //隐藏鼠标光标 
 
        srand ((int) GetCurrentTime ()) ; //初始化随机数发生器
        while (GetMessage (&msg, NULL, 0, 0)) 
 
{
            TranslateMessage (&msg) ;
            DispatchMessage (&msg) ;
        }
        ShowCursor(TRUE); //显示鼠标光标
        return msg.wParam ;
} 
 
TCHAR randomChar() //随机字符产生函数
{
        return (TCHAR)(rand()%(126-33)+33); //33到126之间
} 
 
int init(CharColumn *cc, int cyScreen, int x) //初始化
{
        int j;
        cc->iStrLen = rand()%(STRMAXLEN-STRMINLEN) + STRMINLEN; //显示列的长度
        cc->x = x+3 ;        //显示列的开始显示的x坐标
        cc->y =rand()%3?rand()%cyScreen:0; //显示列的开始显示的y坐标
        cc->iMustStopTimes = rand()%6 ;
        cc->iStopTimes    = 0 ;
        cc->head = cc->current =
                        (pCharChain)calloc(cc->iStrLen, sizeof(CharChain)); //生成显示列
        for(j=0; j<cc->iStrLen-1; j++)
        {
                cc->current->prev = cc->point; //cc->point一个显示列的前个元素
                cc->current->ch  = '';
                cc->current->next = cc->current+1; //cc->current+1一个显示列的后个元素
                cc->point          = cc->current++; //cc->point = cc->current; cc->current++;
        }
        cc->current->prev = cc->point; //最后一个节点
        cc->current->ch  = '';
        cc->current->next = cc->head; 
 
cc->head->prev    = cc->current; //头节点的前一个为此链的最后一个元素 
 
        cc->current = cc->point = cc->head; //free掉申请的内存要用current当参数
        cc->head->ch = randomChar(); // 对链表头的 元素填充
        return 0;
} 
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
      HDC          hdc ;
      //ctn 用来确定一个显示链是否 向下前进,如果等待次数超过必须等待的次数,ctn就代表要向下前进
      int i, j, temp, ctn; //j为一个显示链中除链表头外的在屏幕上显示的y坐标,temp绿色过度到黑色之用
      static  HDC hdcMem;
      HFONT    hFont;
      static  HBITMAP hBitmap;
      static  int cxScreen, cyScreen; //屏幕的宽度 高度.
      static  int iFontWidth=10, iFontHeight=15, iColumnCount; //字体的宽度 高度, 列数
      static  CharColumn *ccChain; 
 
      switch (message)
      {
        case WM_CREATE:
            cxScreen = GetSystemMetrics(SM_CXSCREEN) ; //屏幕宽度
            cyScreen = GetSystemMetrics(SM_CYSCREEN) ;
            SetTimer (hwnd, ID_TIMER, 10, NULL) ; 
 
            hdc = GetDC(hwnd);
            hdcMem = CreateCompatibleDC(hdc);
            hBitmap = CreateCompatibleBitmap(hdc, cxScreen, cyScreen);
            SelectObject(hdcMem, hBitmap);
            ReleaseDC(hwnd, hdc);
            //创建字体
            hFont = CreateFont(iFontHeight, iFontWidth-5, 0, 0, FW_BOLD, 0, 0, 0, 
 
     DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
                                DRAFT_QUALITY, FIXED_PITCH | FF_SWISS, TEXT("Fixedsys"));
            SelectObject(hdcMem, hFont);
            DeleteObject (hFont) ;
            SetBkMode(hdcMem, TRANSPARENT); //设置背景模式为 透明
            iColumnCount = cxScreen/(iFontWidth*3/2); //屏幕所显示字母雨的列数 
 
            ccChain = (pCharColumn)calloc(iColumnCount, sizeof(CharColumn));
            for(i=0; i<iColumnCount; i++)
            {
                init(ccChain+i, cyScreen, (iFontWidth*3/2)*i);
            }
            return 0 ; 
 
        case WM_TIMER:
            hdc = GetDC(hwnd);
            PatBlt (hdcMem, 0, 0, cxScreen, cyScreen, BLACKNESS) ; //将内存设备映像刷成黑色
            for(i=0; i<iColumnCount; i++)
            {
                ctn = (ccChain+i)->iStopTimes++ > (ccChain+i)->iMustStopTimes;
                //
                (ccChain+i)->point = (ccChain+i)->head; //point用于遍历整个显示列 
 
                //第一个字符显示为 白色
                SetTextColor(hdcMem, RGB(255, 255, 255)); 
 
TextOut(hdcMem, (ccChain+i)->x, (ccChain+i)->y, &((ccChain+i)->point->ch), 1);
                j = (ccChain+i)->y;
                (ccChain+i)->point = (ccChain+i)->point->next;
                //遍历整个显示列,将这个显示列里的字符从下往上显示
                temp = 0 ; //temp绿色过度到黑色之用
                while((ccChain+i)->point != (ccChain+i)->head && (ccChain+i)->point->ch)
                {
                        SetTextColor(hdcMem, RGB(0, 255-(255*(temp++)/(ccChain+i)->iStrLen), 0));
                        TextOut(hdcMem, (ccChain+i)->x, j-=iFontHeight, &((ccChain+i)->point->ch), 1);
                        (ccChain+i)->point = (ccChain+i)->point->next;
                }
                if(ctn)
                    (ccChain+i)->iStopTimes = 0 ;
                else continue;
                (ccChain+i)->y += iFontHeight; //下次开始显示的y坐标 为当前的y坐标加上 一个字符的高度
                //如果开始显示的y坐标减去 整个显示列的长度超过了屏幕的高度
                if( (ccChain+i)->y-(ccChain+i)->iStrLen*iFontHeight > cyScreen)
                {
                        free( (ccChain+i)->current );
    init(ccChain+i, cyScreen, (iFontWidth*3/2)*i);
                }
                //链表的头 为此链表的前个元素,因为下次开始显示的时候 就相当与在整个显示列的开头添加个元素,然后在开始往上显示
                (ccChain+i)->head = (ccChain+i)->head->prev;
                (ccChain+i)->head->ch = randomChar();
            } 
 
            BitBlt(hdc, 0, 0, cxScreen, cyScreen, hdcMem, 0, 0, SRCCOPY);
            ReleaseDC(hwnd, hdc);
            return 0; 
 
        case WM_RBUTTONDOWN:
            KillTimer (hwnd, ID_TIMER) ;
            return 0; 
 
        case WM_RBUTTONUP:
            SetTimer (hwnd, ID_TIMER, 10, NULL) ;
            return 0; 
 
        //处理善后工作
        case WM_KEYDOWN:
        case WM_LBUTTONDOWN:
        case WM_DESTROY:
            KillTimer (hwnd, ID_TIMER) ;
            DeleteObject(hBitmap);
            DeleteDC(hdcMem);
            for(i=0; i<iColumnCount; i++)
            {
                free( (ccChain+i)->current );
            }
            free(ccChain);
            PostQuitMessage (0) ;
            return 0 ;
        }
        return DefWindowProc (hwnd, message, wParam, lParam) ;
}
2010 - 10 - 08分享心得

9条评论
900 views

巧用记事本记录工作日志

也许你有记录工作日志的习惯,也许你有写日记的习惯~~总之你需要一款软件来帮助你记录下你的点点滴滴~什么,你说用OneNote,什么你说用EveryNote,什么你说用网文快捕?今天给大家介绍一则小技巧,让你用记事本就能记录日志~~

嘿嘿,很简单,随便新建一个文本文档(.txt文件)之后在第一行输入”.LOG”(不含引号,但是注意大写,注意点号)之后保存,再用记事本打开看看吧,发现什么~每打开一次,记事本就会自动帮你加上时间喔~~~嘿嘿~~~虽然功能没有上文提到的那些专业日志记录软件强大,但是平时用起来,也算是方便吧~~

返回顶部