常用ASCII码表
键盘常用ASCII码 & Ctrl组合键2012-04-14 09:12:42| 分类: 默认分类 | 标签: |字号大中小 订阅
ESC键 VK_ESCAPE (27)
回车键: VK_RETURN (13)
TAB键: VK_TAB (9)
Caps Lock键: VK_CAPITAL (20)
Shift键: VK_SHIFT ($10)
Ctrl键: VK_CONTROL (17)
Alt键: VK_MENU (18)
空格键: VK_SPACE ($20/32)
退格键: VK_BACK (8)
左徽标键: VK_LWIN (91)
右徽标键: VK_LWIN (92)
鼠标右键快捷键:VK_APPS (93)
Insert键: VK_INSERT (45)
Home键: VK_HOME (36)
Page Up: VK_PRIOR (33)
PageDown: VK_NEXT (34)
End键: VK_END (35)
Delete键: VK_DELETE (46)
方向键(←): VK_LEFT (37)
方向键(↑): VK_UP (38)
方向键(→): VK_RIGHT (39)
方向键(↓): VK_DOWN (40)
F1键: VK_F1 (112)
F2键: VK_F2 (113)
F3键: VK_F3 (114)
F4键: VK_F4 (115)
F5键: VK_F5 (116)
F6键: VK_F6 (117)
F7键: VK_F7 (118)
F8键: VK_F8 (119)
F9键: VK_F9 (120)
F10键: VK_F10 (121)
F11键: VK_F11 (122)
F12键: VK_F12 (123)
Num Lock键: VK_NUMLOCK (144)
小键盘0: VK_NUMPAD0 (96)
小键盘1: VK_NUMPAD0 (97)
小键盘2: VK_NUMPAD0 (98)
小键盘3: VK_NUMPAD0 (99)
小键盘4: VK_NUMPAD0 (100)
小键盘5: VK_NUMPAD0 (101)
小键盘6: VK_NUMPAD0 (102)
小键盘7: VK_NUMPAD0 (103)
小键盘8: VK_NUMPAD0 (104)
小键盘9: VK_NUMPAD0 (105)
小键盘.: VK_DECIMAL (110)
小键盘*: VK_MULTIPLY (106)
小键盘+: VK_MULTIPLY (107)
小键盘-: VK_SUBTRACT (109)
小键盘/: VK_DIVIDE (111)
Pause Break键: VK_PAUSE (19)
Scroll Lock键: VK_SCROLL (145)
Ctrl组合键ASCII码
ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符
0(00) NULL 8(08) ^H 16(10) ^P 24(18) ^X
1(01) ^A 9(09) ^I 17(11) ^Q 25(19) ^Y
2(02) ^B 10(0A) ^J 18(12) ^R 26(1A) ^Z
3(03) ^C 11(0B) ^K 19(13) ^S 27(1B) ^[
4(04) ^D 12(0C) ^L 20(14) ^T 28(1C) ^\
5(05) ^E 13(0D) ^M 21(15) ^U 29(1D) ^]
6(06) ^F 14(0E) ^N 22(16) ^V 30(1E) ^^
7(07) ^G 15(0F) ^O 23(17) ^W 31(1F) ^_
ctrl+字母的ASCII码=字母的ASCII码&0x1f
function submitLoginForm(e) {
e = window.event || e;
if(e.keyCode == 13) {
login();
}
}
keycode 9 = Tab Tab
keycode 12 = Clear
keycode 13 = Enter
keycode 16 = Shift_L
keycode 17 = Control_L
keycode 18 = Alt_L
keycode 19 = Pause
keycode 20 = Caps_Lock
keycode 27 = Escape Escape
keycode 32 = space space
keycode 33 = Prior
keycode 34 = Next
keycode 35 = End
keycode 36 = Home
keycode 37 = Left
keycode 38 = Up
keycode 39 = Right
keycode 40 = Down
keycode 41 = Select
keycode 42 = Print
keycode 43 = Execute
keycode 45 = Insert
keycode 46 = Delete
keycode 47 = Help
keycode 48 = 0 equal braceright
keycode 49 = 1 exclam onesuperior
keycode 50 = 2 quotedbl twosuperior
keycode 51 = 3 section threesuperior
keycode 52 = 4 dollar
keycode 53 = 5 percent
keycode 54 = 6 ampersand
keycode 55 = 7 slash braceleft
keycode 56 = 8 parenleft bracketleft
keycode 57 = 9 parenright bracketright
keycode 65 = a A
keycode 66 = b B
keycode 67 = c C
keycode 68 = d D
keycode 69 = e E EuroSign
keycode 70 = f F
keycode 71 = g G
keycode 72 = h H
keycode 73 = i I
keycode 74 = j J
keycode 75 = k K
keycode 76 = l L
keycode 77 = m M mu
keycode 78 = n N
keycode 79 = o O
keycode 80 = p P
keycode 81 = q Q at
keycode 82 = r R
keycode 83 = s S
keycode 84 = t T
keycode 85 = u U
keycode 86 = v V
keycode 87 = w W
keycode 88 = x X
keycode 89 = y Y
keycode 90 = z Z
keycode 96 = KP_0 KP_0
keycode 97 = KP_1 KP_1
keycode 98 = KP_2 KP_2
keycode 99 = KP_3 KP_3
keycode 100 = KP_4 KP_4
keycode 101 = KP_5 KP_5
keycode 102 = KP_6 KP_6
keycode 103 = KP_7 KP_7
keycode 104 = KP_8 KP_8
keycode 105 = KP_9 KP_9
keycode 106 = KP_Multiply KP_Multiply
keycode 107 = KP_Add KP_Add
keycode 108 = KP_Separator KP_Separator
keycode 109 = KP_Subtract KP_Subtract
keycode 110 = KP_Decimal KP_Decimal
keycode 111 = KP_Divide KP_Divide
keycode 112 = F1
keycode 113 = F2
keycode 114 = F3
keycode 115 = F4
keycode 116 = F5
keycode 117 = F6
keycode 118 = F7
keycode 119 = F8
keycode 120 = F9
keycode 121 = F10
keycode 122 = F11
keycode 123 = F12
keycode 124 = F13
keycode 125 = F14
keycode 126 = F15
keycode 127 = F16
keycode 128 = F17
keycode 129 = F18
keycode 130 = F19
keycode 131 = F20
keycode 132 = F21
keycode 133 = F22
keycode 134 = F23
keycode 135 = F24
keycode 136 = Num_Lock
keycode 137 = Scroll_Lock
keycode 187 = acute grave
keycode 188 = comma semicolon
keycode 189 = minus underscore
keycode 190 = period colon
keycode 192 = numbersign apostrophe
keycode 210 = plusminus hyphen macron
keycode 211 =
keycode 212 = copyright registered
keycode 213 = guillemotleft guillemotright
keycode 214 = masculine ordfeminine
keycode 215 = ae AE
keycode 216 = cent yen
keycode 217 = questiondown exclamdown
keycode 218 = onequarter onehalf threequarters
keycode 220 = less greater bar
keycode 221 = plus asterisk asciitilde
keycode 227 = multiply division
keycode 228 = acircumflex Acircumflex
keycode 229 = ecircumflex Ecircumflex
keycode 230 = icircumflex Icircumflex
keycode 231 = ocircumflex Ocircumflex
keycode 232 = ucircumflex Ucircumflex
keycode 233 = ntilde Ntilde
keycode 234 = yacute Yacute
keycode 235 = oslash Ooblique
keycode 236 = aring Aring
keycode 237 = ccedilla Ccedilla
keycode 238 = thorn THORN
keycode 239 = eth ETH
keycode 240 = diaeresis cedilla currency
keycode 241 = agrave Agrave atilde Atilde
keycode 242 = egrave Egrave
keycode 243 = igrave Igrave
keycode 244 = ograve Ograve otilde Otilde
keycode 245 = ugrave Ugrave
keycode 246 = adiaeresis Adiaeresis
keycode 247 = ediaeresis Ediaeresis
keycode 248 = idiaeresis Idiaeresis
keycode 249 = odiaeresis Odiaeresis
keycode 250 = udiaeresis Udiaeresis
keycode 251 = ssharp question backslash
keycode 252 = asciicircum degree
keycode 253 = 3 sterling
keycode 254 = Mode_switch
使用
<script language="javascript">
function keyevent(){
if(event.keyCode==13)
alert("#$%#%#^^%");
}
document.onkeydown = keyevent;
</script>
可口的Cookie
偶然听朋友说,某公司推出一款叫做Cookie的产品,还不错,可以关注下,就去Cookie的官网打瓶酱油。暂时不说这款基于Cortex-M内核的Cookie开发板怎么样,单从Coocox公司的产品线布局,不得不佩服公司敏锐的市场洞察力,另外,Coocox的开源精神也是国内所缺乏的。
ARM公司在ARMv7后,开始采用新的产品名称,分为3个系列:
在中低端应用市场中,Cortex-M系列芯片用的最多,正如ARM公司所说:“ARM Cortex-M 处理器是全球微控制器标准”。
Cortex-M问世后,各大芯片厂商(TI,ST,Freescale,NXP,ATMEL)分别推出了自己的基于Cortex-M内核的产品,其中以Cortex-M3内核芯片为甚,比如国内市场上最火的STM32系列。后来,ARM公司为了满足微控制器的低功耗应用市场需求,裁剪了M3的部分特性,精简指令,推出M0内核,这直接威胁到传统8位和16位机的生存空间。另外,同为Cortex-M系列的M4,则拥有内置浮点运算单元和DSP组件,使其更适合需要有效且易于使用的控制和信号处理功能混合的数字信号控制市场。
Cortex-M的出现,致使微控制器市场重新洗牌,现在的情况是:Cortex-M芯片的市场售价非常低廉,甚至能与传统的8位机相抗衡的地步:比如高端的AVR mega128 单片机,市场价在40元左右,这个价格能买到更远比AVR mega128强大的Cortex-M芯片,同时Cortex-M芯片带来的创新也能极大的减少开发人员的劳动强度,比如强大的调试系统,完全采用C语言编程。另外,M0内核芯片主打传统8051和ARM7/9中间空白区域的那块市场,取代8051只是时间问题。
由此看,Cortex-M内核统一了原来各大芯片厂商独有的32位架构,覆盖了中低端MCU市场。Cortex-M即将成为了微控制器的事实标准。
此后ARM公司及时推出了CMSIS(CortexMicroControl Software Interface Standard)来统一编程模型,向开发者提供一致API编程接口。需要注意的是:ARM并没有统一外设,因为ARM公司打造的是一个健康的生态圈,要想生态圈可持续发展,就要给其它厂商生存的空间。因为各大芯片厂商在获得ARM公司授权后,在原有Cortex-M内核基础上,添加自己独有的功能,生产各种独具特色的芯片,来满足不同应用市场。芯片厂商就是靠外设差异化来生存的。如果ARM统一了外设标准,各个芯片厂商造出的芯片一模一样,它们就没什么竞争力了,自然也没有了生存空间,厂商没了生存空间,ARM自然也长久不了。
对于我们芯片开发者来说,因为有了统一的内核编程模型,所以我们可以编写的内核代码,不用做任何更改,便可移植到另外一种Cortex-M芯片上,这减轻了我们的负担。但是对于各个芯片的外设,还是要单独编程,没有可移植性而言,比如:在某个项目中,需要使用LPC的PWM模块来控制舵机,我们不得不先查Reference Manual,然后配置时钟,设置周期,模式,配置占空比;这个项目做完后,开始了下一个项目,也是用PWM模块来控制舵机,但是这次使用的是TI的芯片,额,我们又要重复一遍LPC上面的过程,配置时钟,设置周期,模式,配置占空比,这个项目做了一个月,终于结束了;然而,下一个项目又是用PWM控制直流电机,但是因为价格因素,采用了STM32芯片,用控制占空比来决定电机转速。估计要崩溃了,其实吧,从功能层面来讲,不同芯片的PWM主要功能都是一样的,不同的是:1:具有PWM的某些特殊功能。2:寄存器设置不同。
其实,回顾计算机历史,我们会发现某些相似的现象,比如C和汇编,汇编是不可移植的,依赖于特定平台,编写的汇编代码不具备可移植性,原有代码不能重用,这就极大的加重了工程师的负担,后来,为了简化编程,出现了C,这样,编译器就代替了我们的工作,将可移植性的C代码生成不可移植的汇编代码。我们采用可移植性的C语言后,就提升了抽象层次,不再考虑具体而微的汇编执行级代码,而是侧重于逻辑层。
现在回到外设的差异性问题,我们也不得不思考,有没有会有一种产品能解决这个问题,扮演像编译器那样的角色。OK,世界上总是不乏聪明人,精明公司,比如Coocox,说Coocox战略眼光独到,就是因为Coocox看准了两点:
1:Cortex-M会主导MCU市场。
2:内核统一了接口,但外设接口标准还没有统一,这里存在个真空地带。
Coocox据此推出了CoX软件接口标准,打算借此统一外设,同时推出了各种嵌入式开发工具,比如CoIDE,CoFlash,ColinkEx等,看来Coocox是想控制整个工具链。具体Coocox的各个组件作用,这里不做解释了,感兴趣的,可以去官网看下。
ok,现在回到Cookie的话题,按照官网的介绍,Cookie是开源项目,面向广大电子爱好者,软硬件都开源。感觉和最近很火的arduino和Raspberry Pi模式很像,仔细分析Arduino,Cookie,RaspberryPi,会发现三者无论是开源精神,目标市场,受众人群,都非常相似,但是三者组合起来后,便完美的覆盖了整个MCU市场。
首先说下Arduino。
Arduino的起源很有意思。据说Massimo Banzi在一家高科技设计学校老师时,听到学生们经常抱怨找不到便宜好用的微控制器。 Massimo Banzi也是个很负责的老师,于是他找到了西班牙籍晶片工程师DavidCuartielles讨论了这个问题,最后两人决定设计自己的电路板,并让Banzi的学生David Mellis为电路板设计编程语言。三个牛人在一块儿,效率自然出奇的高,两天以后,David Mellis就写出了代码,又过了三天,电路板就完工了。这块电路板被命名为Arduino。几乎任何人,即使不懂电脑编程,也能用Arduino做出很酷很炫的,好玩的东西。随后Banzi,Cuartielles,和Mellis把设计图放到了网上。保持设计的开源的理念,因为版权法可以监管开源软体,却很难用在硬体上,他们决定采用Creative Commons许可。 Creative Commons(CC)是为保护开放版权行为而出现的类似GPL的一种许可(license)。在Creative Commons许可下,任何人都被允许生产电路板的复制品,还能重新设计,甚至销售原设计的复制品。你不需要付版税,甚至不用取得Arduino团队的许可。然而,如果你重新发布了引用设计,你必须说明原始Arduino团队的贡献。如果你调整或改动了电路板,你的最新设计必须使用相同或类似的 Creative Commons许可。
电子爱好者,向来喜欢开源的作品,所以Arduino一推出,立即受到大家的欢迎,在全球火了起来,并带动更多的人来玩这个toy。国内也有很多的Arduino爱好者社区,每个人将自己基于Arduino做的很酷的东西,分享给大家。慢慢的,Arduino积累了很多的兼容模块,基于这些模块,爱好者可以做出非常更多的toy,这是个良性发展的过程。
但是,现在随着电子行业的发展,用户体验得到前所未有的重视,比如触摸屏,图像处理等,这就对芯片性能提出了更高的要求,同时软件的复杂度成倍增加。因为Arduino基于最低端的AVR芯片,8位机,主频8/16MHz,性能上渐渐不能满足要求了,同时缺乏强有力的调试手段,在面对复杂软件时,难以调试,如果你玩过8051,相信对软件调试方面,有很深刻的体会。另外一方面呢,芯片的价格变得很低,现在某些Cortex-M32位芯片的价格,能和传统8位机相抗衡,这样,就凸显了32位的极高的性价比,为Arduino升级芯片是必然趋势。
提到Arduino,就不得不提到最近很火的Raspberry Pi(国内称之为:树莓)。
无独有偶,Raspberry Pi也是一位老师发明的,剑桥大学的Eben Upton和他计算机实验室的同事发现,最近几年招收的高材生,在编程方面很弱,远远比不上前几年的学生水平,是什么原因导致了这些学生缺乏编程能力呢,后来Eben upton发现,最近几年,游戏和娱乐应用极大的发展,导致这些学生开电脑的第一件事便是玩游戏,而不像他们那些人上学时,打开电脑就是敲hello world代码。看到了吧,剑桥老师就是这么敬业,如果你想成为剑桥的老师,打开电脑敲hello world吧 ^_^
后来,这几个老师动手做了个便于编程的微型计算机,打算给计算机专业学生使用,后来发现,随着手机芯片的发展,媒体应用变得越来越重要,比如听音乐,上网等等,在某些经济不发达的地区,还未普及计算机,很多人用不起昂贵的PC,这样,Eben upton, Rob, Jackand Alan, 联合其它公司的CEO成立RaspberryPi慈善基金,打算造些更便宜的计算机让每个人都有机会使用计算机。比尔盖茨曾有一个梦想:让每个人都有自己的电脑。现在看来,实现这个梦想的可能不是微软(Microsoft),而是Raspberry Pi 慈善基金。
树莓在发布后的第一天,便销售一空,足见其受欢迎程度。如果你也打算买一个玩玩,可以在e-络盟订购,e-络盟是PremierFarnell的中国子公司,目前 Premier Farnell 和 RS Electronics是Raspberry Pi 的唯一全球代理。关于Raspberry Pi的详细介绍,可以访问其官网http://www.raspberrypi.org/
现在从技术角度来看Raspberry Pi,它采用更高级的手机芯片ARM11,主频700MHz,采用linux系统,现在支持Android 4.0系统,性价比很高的toy,但是学习难度也是非常高的,如果你没接触过linux,ARM11,想玩转Raspberry Pi简直是徒步登天。不过,估计剑桥大学的学生有这水平,对于咱们智商一般的爱好者来说,还是一步一步学习,逐渐进阶,这个比较靠谱点。假设你玩过Arduino,想玩Raspberry Pi,三思啊,先考虑下你有没有那个能力,再做决定。
这中间的学习空白地带,由谁来填补呢,当然是Cookie。从芯片性能上来说,Cortex-M系列芯片高于8位机,但比ARM11性能弱。在上手难易程度上,Cookie也是介于Arduino和RaspberryPi之间,Arduino是玩具级,Raspberry Pi是系统级,而Cookie系统规模介于二者之间,完全处于可控范围内。
另外,Cookie的接口完全兼容Arduino板,这样,原来在Arduino上使用的模块板,完全不用更换,可以直接拿到Cookie上使用。
Cookie另外的优势是:可以充分利用Coocox公司的各种开源工具。
比如组件平台,一个类似apple store的地方,专门为开发者提供的组件平台。在传统的Arduino社区,电子爱好者也乐于分享组件代码,硬件模块,但是它们是分散的,基于各个论坛的,没有个全球统一的平台,不便于统一管理,现在Coocox实现了这个平台,爱好者可以将自己的驱动代码,组件和很酷的东西,实时分享给全球的爱好者。
比如CoX接口,爱好者可以借助于这个接口来开发各种驱动,这样,其它人就可以直接拿来使用你开发的驱动直接使用了。关于CoX的好处,前面介绍过了,这里不再详细说明。
总之,Cookie是一个很不错的硬件平台,有许多潜力等待你去深度发掘;Coocox的决策层也有非常敏锐的市场洞察力,未来这个公司的走向如何,值得关注。
Cookie已上桌,欢迎品尝。
转至:http://blog.csdn.net/xuesong5825718/article/details/7977685
1楼hustzidong4天前 10:49这个Cookie小点心还有点意思。n不知道Arduino这个东西在国内火不火,国外还是挺火的。n是不是我们的生存压力太大了?呵呵nn不管怎么样,支持一下勇于创新的Cookie!再然后把原来所有继承CursorAdapter的类直接换成CustomCursorAdapter,这样一搞居然还真把问题给解决了,现在不管屏幕翻转多少次,都不会再出现OutOfMemoryError!
import android.content.Context; import android.database.Cursor; import android.provider.BaseColumns; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; public abstract class CustomCursorAdapter extends BaseAdapter { protected Context mContext; private Cursor mCursor; public CustomCursorAdapter(Context context, Cursor cursor, int flag) { this(context, cursor); } public CustomCursorAdapter(Context context, Cursor cursor) { if (context == null) { throw new NullPointerException("context should not be null"); } this.mContext = context; this.mCursor = cursor; } @Override public int getCount() { if (mCursor != null) { return mCursor.getCount(); } else { return 0; } } @Override public Object getItem(int position) { if (mCursor != null) { mCursor.moveToPosition(position); return mCursor; } else { return null; } } @Override public long getItemId(int position) { if (mCursor != null) { if (mCursor.moveToPosition(position)) { return mCursor.getLong(mCursor.getColumnIndexOrThrow(BaseColumns._ID)); } else { return 0; } } else { return 0; } } @Override public View getView(int position, View convertView, ViewGroup parent) { if (!mCursor.moveToPosition(position)) { throw new IllegalStateException("couldn't move cursor to position " + position); } View v; if (convertView == null) { v = newView(mContext, mCursor, parent); } else { v = convertView; } bindView(v, mContext, mCursor); return v; } public abstract View newView(Context context, Cursor cursor, ViewGroup view); public abstract void bindView(View view, Context context, Cursor cursor); public Cursor getCursor() { return mCursor; } }