一 : Quora界面两点新变化 帮用户发现感兴趣内容
作为一个以知识为驱动力量的社区,话题组织如果不能满足用户需求,是不应该的。Quora 这个典型的知识型社区的界面有了两点变化,让用户能够更加容易发现自己感兴趣的内容。
变化1:当你进入一个知识节点里面, 就会发现界面发生了变化,现在一条条话题的上方多出了两个区域,一个是“Best Questions”,一个是“Open Questions”,另一个是“Frequently Asked Questions”。“Best Questions”里面收集了最活跃的话题;而“Open Questions”里面则收集了那些还没回答的问题;“Frequently Asked Questions”上面则显示比较常见的问题。
根据 Quora 的工程师 Edmond Lau,这一界面改动有助于让人们更完整的描述自己的问题。而越完整的问题,就会让问题显得越有针对性,从而让别人回答的答案越具体,也越具有具有价值。这可算是增加内容价值的一种手段。
变化2:话题(Topic)页面新增了“话题群组(Topic Groups)的功能,让用户可以在个人页面上直接显示自己关注的话题,而有关这个话题的内容都会在这个群组的页面集中显示。比如说,你关注“Start-up”的问题,那么你的个人页面上的右上方就会显示这个话题群组“Start-up Groups”,当你进入这个群组,所有在不同知识节点下提到的,话题标记中包含“Start-up”的话题,都汇聚到这个页面中。
Edmond Lau 相信这个新功能能让用户更快更直接的到达自己关注的话题。相信此举确实能够提升用户的体验。但是我在使用中发现了一点问题,用户如果想新增一个话题群组,不是那么容易,需要用户在话题的后面新增“/Group”,才能进入群组页面,然后再点击“Watch Group”按钮,才能新增一个话题群组。为何 Quora 不直接在每个话题界面中,直接添加话题群组的按钮,让用户直达呢?
以上这两点新变化,还显示出了 Quora 知识型社区的经营哲学:
——知识表达越精确,就约有利于传播。实际上,所有社区都面临这样的问题,提问的人往往无法给出一个好问题,从而也无法有一个好回答。而高质量的讨论内容,是决定社区能否繁荣发展的关键。缺乏高质量的讨论,让刚起步的社区无法吸引到足够的人气,而已经成熟的社区在时间的流逝下会面临用户不断流失的问题。针对这点,虽然有人专门撰写出《提问的智慧》,给社区中的新成员给予引导。而 Quora 显然认为,一个不精确的问题,难以引发一个高质量的讨论,而如果问题描述得越精确,就越有可能出现高质量的讨论。
——改善用户体验,让用户更容易发现自己喜欢的内容。社区另外一个问题是,好内容很容易就被新的讨论给淹没。社区的高人气虽然能够让社区充满活力,反而让社区的好内容越发难以寻找,这是一个悖论。如何让社区内好的内容长期发挥作用?尽管很多社区都有对帖子进行高亮、加分、加精华等措施。然而,这些措施对于新加入社区的成员来说,未必有用——他们可能也就是过来看一眼,而不会深入的发掘社区的内容。因此第一眼印象就变得相当重要。另外一方面,让用户更容易发现好的内容,也能增加用户的粘度,当用户产生“这个社区好棒,处处都有高质量的讨论”的印象时,他就会不断的登录社区,为社区增加点击率,而随着兴趣的提高,他可能还会参与讨论,提交高质量的回复,无形中给社区增值。
社区的经营需要智慧,需要发觉到隐藏在水面之下的很多因素,因此好的引导不可缺少,好的方式也不可缺少。
二 : cam350:cam350-用户界面,cam350-主要应用
CAM350就是把layout工程师设计出来的线路板,经客户以电脑资料的方式给线路板厂,然后板厂根据该厂里的机器设备能力和生产能力,利用CAM软件(genesis2000,cam350,ucam,v2001等)将客户提供的原始资料根据该厂的生产能力修正后,为生产的各工序提供某些生产工具(比如菲林、钻带、锣带等),以方便本厂能生产符合客户要求的线路板,起的就是辅助制造作用。CAM350提供完整的从设计到生产的PCB流程,成功完成数据的流畅转换和检测。
cam350_cam350 -用户界面
MainMenuBar
主菜单栏,直接单击鼠标左键就可以打开个菜单,也可通过ALT与菜单项首字母的组合打开菜单。
ToolBar
工具条,这个动态的工具条包含好几项功能。栅格选择框是固定的,而其
他的如Active Dcode、Active Layer 可以根据具体的命令而改变。
GridSelection
这是一格组合框,[www.61k.com)既可以从下拉列表中选择栅格大小,也可以直接输入栅格尺寸。输入的X、Y 坐标值可以是整数也可以是小数,而且可以是不同的值。如果输入了X 坐标然后回车,那么Y 坐标就默认为与X坐标相同。
ActiveDcode
这是1个当前定义的光圈(Aperture)的下拉列表;在列表中被选中的选项将设置为当前激活的D 码。与热键“D”具有相同功能。
ActiveLayer
这个下拉列表包含板子的所有层,单击任何一层将激活该层,并使该层为当前层。与热键“L”具有相同功能。
LayerControlBar
这个垂直的工具条位于窗口的左侧,用来控制所有层的信息。控制条的上方为Redraw、Add Layer、All On、All Off 按钮。其中Redraw 是刷新显示,与热键“R”有相同功能。Add layer 可以在现有的层后面再加一层,同样也可以利用菜单中Edit ->Layers ->Add Layers 命令来实现增加层的操作。All On 按钮将所有层都再主工作区域内显示出来。All Off 将除当前层之外的所有层都关闭。
鼠标左键点击任意层的数字即可将该层设置为当前被激活的层,并且会在该层的数字上显示1个蓝色的小框。如果右键点击任意层的数字,那么这一层将成为最前面的一层。并且在这层的数字上会有1个透明的小框显示。
在代表层的数字右侧是层的颜色,这个颜色分2个部分:左边是draw 颜色,右边是flash 的颜色。右击即可改变draw/flash 的颜色,这时就会打开调色板:可以在调色板上选择Show/Hide 来显示或隐藏Draw 和Flash,还可以点击Load 来导入另1个调色板。
StatusBar
状态栏,在屏幕的最下方。提供了有关当前命令、光标所在位置的坐标、单位等信息。
显示当前光标位置或设置光标位置模式:显示光标所在位置的坐标,并且可以精确到小数点后四位。也可以用来直接是输入新的坐标,这其实相当于用鼠标左键在工作
区内点击所显示的坐标。要想输入坐标时,只须双击就会出现1个对话框。此时,对话框中显示的位鼠标左键上次点击的坐标值。可以输入新的坐标,利用回车键切换X、Y 坐标的输入。另外,对话框中还右3种模式可供选择:Absolute/Relative/AutoPan 。
Absolute 是绝对坐标模式,这种模式下显示的是实际的坐标值。
Relative 模式是相对坐标模式,这种模式下显示的是当前坐标相对于前一坐标的变化值。此时,屏幕上会出现1个小的圈记录光标前一次所在的位置。在输入坐标时,如果以@符号开头,系统将默认选择进入Relative 模式。
如果选择AutoPan 的话,系统自动显示输入点,包括不在当前显示范围内的点。
8. 右边是单位显示,这个单位与Settings ->Unit 中的设置是一致的。
cam350_cam350 -主要应用
CAM350可制造性分析工具
随着产品的小型化,快速化,带来了设计的复杂度的大幅提高,如何保证复杂的设计工程数据能快速有效转换到可实际生产的PCB制作文件,并保证设计数据的正确性,显得非常重要。CAM350提供完整的从设计到生产的PCB流程,成功完成数据的流畅转换和检测。
cam350_cam350 -优点
PCB设计和制造周期,是1个复杂的过程,需要好几个不同的阶段。
· 减少反复设计,减少废料和废板
· 提高可制造性
· 加快生产周期,提高生产效率
· 提高自动化率和设计最优化
· 提高质量和数据库管理
· 提高大批量生产裸板的效率
cam350_cam350 -常见钻孔及含义
PTH - 镀通孔:孔壁镀复金属而用来连接中间层或外层的导电图形的孔。
PTH - 镀通孔:孔壁镀复金属而用来连接中间层或外层的导电图形的孔。
NPTH - 非镀通孔:孔壁不镀复金属而用于机械安装或机械固定组件的孔。
NPTH - 非镀通孔:孔壁不镀复金属而用于机械安装或机械固定组件的孔。
VIA - 导通孔:用于印制板不同层中导电图形之间电气连接(如埋孔、盲孔等),
VIA - 导通孔:用于印制板不同层中导电图形之间电气连接(如埋孔、盲孔等),
但不能插装组件引腿或其它增强材料的镀通孔。
但不能插装组件引腿或其它增强材料的镀通孔。
盲孔:仅延伸到印制板的1个表面的导通孔。
盲孔:仅延伸到印制板的1个表面的导通孔。
埋孔:未延伸到印制板表面的导通孔。
埋孔:未延伸到印制板表面的导通孔。
LEADING ZERO SUPPRESS:坐标整数字前面的0 省略,小数字数不够以0 补齐。
LEADING ZERO SUPPRESS:坐标整数字前面的0 省略,小数字数不够以0 补齐。
TRAILING ZERO SUPPRESS:坐标小数字后面的0 省略,整数字数不够以0 补齐。
TRAILING ZERO SUPPRESS:坐标小数字后面的0 省略,整数字数不够以0 补齐。
NONE ZERO SUPPRESS:整数和小数字数不够均以0 补齐。
NONE ZERO SUPPRESS:整数和小数字数不够均以0 补齐。
FORMAT(小数点之隐藏) :共有10种格式。
FORMAT(小数点之隐藏) :共有10种格式。
cam350钻孔盘(DRILL RACK)介绍
cam350钻孔盘(DRILL RACK)介绍
主要描述钻孔档中用到的钻头大小,有的还说明孔是PTH 或NPTH。
主要描述钻孔档中用到的钻头大小,有的还说明孔是PTH 或NPTH。
钻孔盘一般以M48 开头,排列在钻孔文件的前面。也有单独以文件说明。
钻孔盘一般以M48 开头,排列在钻孔文件的前面。也有单独以文件说明。
DRILL RACK+DRILL FILE=完整的钻孔图形
DRILL RACK+DRILL FILE=完整的钻孔图形
cam350镜头档(Apeture File)介绍
cam350镜头档(Apeture File)介绍
镜头档主要描述相应Gerber File 所用镜头之形状和大小。
镜头档主要描述相应Gerber File 所用镜头之形状和大小。
Apeture File + Gerber File =完整的PCB Layout 图形。
Apeture File + Gerber File =完整的PCB Layout 图形。
· 提高大批量生产裸板的效率
· 提高大批量生产裸板的效率
cam350_cam350 -运用技巧
有些资料的文字层有很多文字框,且文字框到线路PAD 间距不满足制程能力时;当资料有大面积铜箔复盖,线路或PAD与铜皮的距离不在制作要求之内,且外型尺寸又较大时的处理方法:
一、当资料有大面积铜箔复盖,线路或PAD与铜皮的距离不在制作要求之内,且外型尺寸又较大时,(如广上的)可用下列方法快速修整线路或PAD与铜皮的间距。先将线路层(此层为第一层)的所有PAD 拷贝到1个空层,把对应在大铜皮上的PAD删除后将剩余PAD 放大做为减线路层(即第二层),然后把第一层拷贝到1个空层,将大铜皮删除后作为第三等。合层方式为:第一层(加层)、第二层(减层)、第三层(加层)。一般来说我们为了减小数据量,可以将第一层只保留大铜皮。如果只是防焊到大铜皮的间距不够,即可把放大后(满足制程能力)的防焊拷贝到1个空层,把对应在大铜皮上的防焊删除后将剩余防焊放大做为第二层。
注:用此方法做好线路后,一定要用命令将多个层面合成Utilities-->Convert Composite 的1个复合层转换成1个层面,然后将此层和原稿用Anglysis-->Compare Layers 命令进行仔细核对。
二、有些资料的文字层有很多文字框,且文字框到线路PAD 间距不满足制程能力时,可借鉴以下方法:先将任何类型的以个文字框用Edit-->Move Vtx/Seg 命令拉伸至规格范围后做成Flash,接着将其同类型的其它文字框做成与之相同的Flash 就可以。但要注意的是,做成Flash 后一定要将其打散,以防下此打开资料时D 码会旋转。
三 : 用户界面
实验六 uC/GUI用户界面设计实验
实验目的
1、了解uC/GUI图形用户界面功能特点
2、了解uC/GUI图形用户界面常用函数
3、掌握uC/GUI图形用户界面程序编写方法
4、掌握uC/GUI图形用户界面简单界面设计方法
实验仪器设备及软件
ARM实验箱,计算机,ADS程序开发软件
实验原理
1、uC/GUI图形用户界面功能
uC/GUI是一个源代码开放的GUI,可以实现Windows风格的图形界面。微型是其最大的特点,占用很小的系统资源,易于移植,功能强大;可以运行在uc/os-ii操作系统中;采用了100%的ANSI C编写,可以应用于任何LCD和CPU。
2、uC/GUI常用界面设计函数
在指定位置显示字符 GUI_DispStringAt(“Hello!”,320,150);
在指定位置显示字符 GUI_DispStringAt(CN_start"武夷学院"CN_end,80,380); 设置字体函数 GUI_SetFont(&GUI_Font8x16);
设置字体函数 GUI_SetFont(&CHINESE_FONT16x1x2);
设置字体颜色 GUI_SetColor(0x4Affff);
LCD清屏 GUI_Clear();
LCD 上画圆 GUI_DrawCircle(320,150, 20);
图形更新 void GUI_Exec(void); //所有图形更改后都要更新一次 框架窗口函数
hFRAM =FRAMEWIN_Create("Frame Window",NULL,WM_CF_SHOW,10,10,220,300); FRAMEWIN_SetFont(hFRAM,&GUI_Font16B_ASCII);
FRAMEWIN_SetTextColor (hFRAM,GUI_RED);
FRAMEWIN_SetBarColor(hFRAM,0,GUI_GREEN);
FRAMEWIN_SetClientColor(hFRAM,0,GUI_BLUE);
文本编辑框
EDIT_Handle hTEXT =EDIT_Create(40,60,100,150,' ',30,0);
EDIT_SetFont(hTEXT, &GUI_Font8x16);
EDIT_GetText(hTEXT,aBuffer,15);
EDIT_SetText(hTEXT,”Hello World!!!”);
EDIT_AddKey(hTEXT,”H”); //向输入区添加字母H
EDIT_SetTextColor(hTEXT,GUI_RED);
按钮
hBUTTON1=BUTTON_Create(160,100,60,30,' ',BUTTON_CF_SHOW);
BUTTON_SetText (hBUTTON1, "OK");
BUTTON_SetText Color (hBUTTON1, GUI_GREEN);
BUTTON_SetBitmap(hBUTTON1,0,&bm_1bpp_0,2,4);
BUTTON_SetBkColor(hBUTTON1,GUI_RED);
BUTTON_SetFont(hBUTTON1,&GUI_Font8x16);
BUTTON_SetState(hBUTTON1,
BUTTON_STATE_HASFOUS|BUTTON_STATE_INACTIVE):
进度条
hProg =PROGBAR_Create(20,250,200,20,WM_CF_SHOW);
PROGBAR_SetBarColor( hProg,0,GUI_RED);
PROGBAR_SetFont(hProg,& GUI_Font8x16);
PROGBAR_SetText(hProg,”HELLO”);
PROGBAR_SetValue(hProg,45);
3、用户输入函数
取按键值 int GUI_GetKey(void);
等待按键 int GUI_WaitKey(void);
存储键值 void GUI_StoreKey(int c);
清除键缓冲区 void GUI_ClearKeyBuffer(void);
读触摸屏状态 int GUI_TOUCH_GetState(GUI_HID_STATE *pState); 存触摸屏状态 void GUI_TOUCH_StoreState(int x, int y);
读触摸屏数据 unsigned int GetTouch_XY_AD(void);
实验内容
1、定义用户界面控制变量
窗口,文本输入框,按钮,进度条,普通文本
2、编写一个简单的用户界面
#include "..\inc\config.h"
OS_STK_DATA stk;
char data=0;
char *aBuffer;
OS_EVENT *Sem;
OS_EVENT *Key_Mbox;
extern const GUI_FONT CHINESE_FONT12;
extern const GUI_FONT CHINESE_FONT16;
extern const GUI_FONT GUI_Font8x16
void GUI(void);
extern void Uart_Printf(char *fmt,...);
#define OUTPORT (*(volatile unsigned *)0x8400000)
#define PHASE0 0x000A;
#define PHASE1 0x0006;
#define PHASE2 0x0005;
#define PHASE3 0x0009;
char CHAR_NUM[]={" HELLO WORLD!"};
void delay_f() //相延时子程序
{
unsigned int i;
for(i=1;i<4000;i++);//修改i的值,可以改变电机旋转的速度(大于800)
}
void delay_s() //步延时子程序
{
unsigned int j;
for(j=1;j<4000;j++);
}
/****************************************************************************** 分配各任务的堆栈容量
******************************************************************************/
OS_STK Stack_Task_1[STACKSIZE];
OS_STK Stack_Task_2[STACKSIZE];
OS_STK Stack_Task_3[STACKSIZE];
OS_STK Stack_Task_4[STACKSIZE];
OS_STK Stack_Task_5[STACKSIZE];
/******************************************************************************
- 函数名称 : Task_2(void *pdata)
- 函数说明 : GUI任务,优先级为56
- 输入参数 : pdata
- 输出参数 : 无
******************************************************************************/
//控件的句柄定义
BUTTON_Handle hButton1,hButton2;
EDIT_Handle hEdit,hEdit_CON;
TEXT_Handle hTEXT;
PROGBAR_Handle hProg;
FRAMEWIN_Handle hFRAM;
void Task_2(void *pdata)
{char time;
INT8U err;
hFRAM=FRAMEWIN_Create("Frame
Window",NULL,WM_CF_SHOW,10,10,220,300);
FRAMEWIN_SetFont(hFRAM,&GUI_Font8x16);
FRAMEWIN_SetTextColor (hFRAM,GUI_RED);
FRAMEWIN_SetBarColor(hFRAM,0,GUI_GREEN);
FRAMEWIN_SetTextAlign(hFRAM,GUI_TA_HCENTER);
hButton1=BUTTON_Create(160,100,60,30,' ',BUTTON_CF_SHOW);
hButton2=BUTTON_Create(160,140,60,30,' ',BUTTON_CF_SHOW);
BUTTON_SetText (hButton1, "OK");
BUTTON_SetText (hButton2, "Cancel");
hTEXT =EDIT_Create(40,60,100,150,' ',30,0);
EDIT_SetFont(hTEXT, &GUI_Font8x16);
FRAMEWIN_SetTextAlign(hTEXT,GUI_TA_LEFT);
hProg =PROGBAR_Create(20,250,200,20,WM_CF_SHOW);
GUI_SetColor(0x4Affff);
GUI_SetFont(&CHINESE_FONT16x1x2);
GUI_DispStringAt(CN_start"武夷学院"CN_end,80,380);
GUI_SetFont(&CHINESE_FONT16);
GUI_DispStringAt(CN_start"电子工程系"CN_end,80,420);
GUI_SetFont(&GUI_Font8x16);
GUI_DispStringAt("www.wuyiu.edu.cn",50,440);
GUI_Exec(); // 或 WM_Exec();
for(;;)
{ OSSemPend(Sem,0,&err);
for(time=0;time<100;time++)
{ PROGBAR_SetValue(hProg,time);
GUI_Exec();
Delay(100);
}
OSTimeDly(1000);
}
}
/******************************************************************************- 函数名称 : Task_4(void *pdata)
- 函数说明 : GUI任务,优先级为56
- 输入参数 : pdata
- 输出参数 : 无
*****************************************************************************/ void Task_4(void *pdata)
{
char rrr = 0;
char d0,d1,d2,d3,d4,d5,d6,d7;
for(;;)
{
rrr = (*(volatile unsigned char *)0x20000016);
d0 = rrr>>7&1;
d1 = rrr>>6&1;
d2 = rrr>>5&1;
d3 = rrr>>4&1;
d4 = rrr>>3&1;
d5 = rrr>>2&1;
d6 = rrr>>1&1;
d7 = rrr>>0&1;
data = (d7<<7|d6<<6|d5<<5|d4<<4|d3<<3|d2<<2|d1<<1|d0);
(*(volatile unsigned char *)0x20000000) = data;
OSTimeDly(50);
}
}
/****************************************************************************** - 函数名称 : Task_START
- 函数说明 : 更新LCD显示,优先级为5
- 输入参数 : pdata
- 输出参数 : 无
******************************************************************************/void Task_3(void *pdata)
{
for(;;)
{
// GUI_Exec();
GUI_CURSOR_SetPosition(42,62);
//GUI_CURSOR_Activate();
GUI_CURSOR_Show();
GUI_Exec();
OSTimeDly(500);
GUI_CURSOR_Deactivate();
GUI_Exec();
// GUI_CURSOR_Clear();
OSTimeDly(500);
}
}
/******************************************************************************- 函数名称 : Task_START
- 函数说明 : 系统启动后运行的第一个任务,,在LCD上画一矩形填充,优先级为5
- 输入参数 : pdata
- 输出参数 : 无
******************************************************************************/ void Task_1(void *pdata)
{
Timer1_Init(); //打开时钟节拍,让操作系统跑起来
OSTaskCreate(Task_2, (void *)0, (OS_STK *)&Stack_Task_2[(STACKSIZE) - 1], 56); //在任务里创建另一个任务
OSTaskCreate(Task_3, (void *)0, (OS_STK *)&Stack_Task_3[(STACKSIZE) - 1], 50); OSTaskCreate(Task_4, (void *)0, (OS_STK *)&Stack_Task_4[(STACKSIZE) - 1], 45); for(;;)
{
GUI_SetColor(GUI_BLUE);
GUI_SetBkColor(GUI_BLUE);
GUI_FillRect(0,0,639,479);
GUI_SetColor(GUI_WHITE);
GUI_Exec();
OSTimeDly(1000);
OSSemPost(Sem);
}
}
/******************************************************************************- 函数名称 : Main(void)
- 函数说明 : 系统的主程序入口
- 输入参数 : 无
- 输出参数 : 无
******************************************************************************/void Main(void)
{
Target_Init();
LCD_Init(); // ARMII实验系统的初始化,包括CPU板 GUI_Init();
OSInit(); // 操作系统的初始化 Sem = OSSemCreate(1);//创建信号量
Key_Mbox = OSMboxCreate((void *)0);
OSTaskCreate(Task_1, (void *)0, (OS_STK *)&Stack_Task_1[STACKSIZE - 1], 5); //创建任务一
OSStart();
}
3、编写一个任务,每隔1000个节拍,清除LCD内容,延时500个节拍后发出更新界面信号。
void Task_5(void *pdata)
{
for(;;)
{
GUI_SetColor(GUI_BLUE);
GUI_SetBkColor(GUI_BLUE);
GUI_FillRect(0,0,639,479);
Delay(500);
OSTimeDly(1000);
}
}
实验步骤
1、 连接实验箱与计算机的串口线,打开计算机超级终端,并设定为com1,115200,8,1,0N
2、 连接仿真调试电缆(并口JTAG)
3、 实验箱上电,并在vivi的指示下,按任意键,进入调试程序状态。
4、 打开ARM集成开发环境ADS,按要求编写或打开实验程序。
5、 按内容要求编写,调试程序,并记录调试过程和数据。
6、 调试完毕,整理实验箱,并切断实验箱电源。
实验思考题
1、编写一个任务,每隔100个节拍给界面中的文本编辑框添加一个字符。 答:char CHAR_NUM[]={" HELLO WORLD!"};
void Task_5(void *pdata)
{//static char num=0;
char num=0;
for(;;)
{
for(num=0;num<13;num++)
{
EDIT_AddKey(hTEXT,CHAR_NUM[num]);
GUI_Exec();
OSTimeDly(200);
}
}
}
四 : 用户界面
实验六 uC/GUI用户界面设计实验
实验目的
1、了解uC/GUI图形用户界面功能特点
2、了解uC/GUI图形用户界面常用函数
3、掌握uC/GUI图形用户界面程序编写方法
4、掌握uC/GUI图形用户界面简单界面设计方法
实验仪器设备及软件
ARM实验箱,计算机,ADS程序开发软件
实验原理
1、uC/GUI图形用户界面功能
uC/GUI是一个源代码开放的GUI,可以实现Windows风格的图形界面。(www.61k.com)微型是其最大的特点,占用很小的系统资源,易于移植,功能强大;可以运行在uc/os-ii操作系统中;采用了100%的ANSI C编写,可以应用于任何LCD和CPU。
2、uC/GUI常用界面设计函数
在指定位置显示字符 GUI_DispStringAt(“Hello!”,320,150);
在指定位置显示字符 GUI_DispStringAt(CN_start"武夷学院"CN_end,80,380); 设置字体函数 GUI_SetFont(&GUI_Font8x16);
设置字体函数 GUI_SetFont(&CHINESE_FONT16x1x2);
设置字体颜色 GUI_SetColor(0x4Affff);
LCD清屏 GUI_Clear();
LCD 上画圆 GUI_DrawCircle(320,150, 20);
图形更新 void GUI_Exec(void); //所有图形更改后都要更新一次 框架窗口函数
hFRAM =FRAMEWIN_Create("Frame Window",NULL,WM_CF_SHOW,10,10,220,300); FRAMEWIN_SetFont(hFRAM,&GUI_Font16B_ASCII);
FRAMEWIN_SetTextColor (hFRAM,GUI_RED);
FRAMEWIN_SetBarColor(hFRAM,0,GUI_GREEN);
FRAMEWIN_SetClientColor(hFRAM,0,GUI_BLUE);
文本编辑框
EDIT_Handle hTEXT =EDIT_Create(40,60,100,150,' ',30,0);
EDIT_SetFont(hTEXT, &GUI_Font8x16);
EDIT_GetText(hTEXT,aBuffer,15);
EDIT_SetText(hTEXT,”Hello World!!!”);
EDIT_AddKey(hTEXT,”H”); //向输入区添加字母H
EDIT_SetTextColor(hTEXT,GUI_RED);
按钮
hBUTTON1=BUTTON_Create(160,100,60,30,' ',BUTTON_CF_SHOW);
BUTTON_SetText (hBUTTON1, "OK");
BUTTON_SetText Color (hBUTTON1, GUI_GREEN);
BUTTON_SetBitmap(hBUTTON1,0,&bm_1bpp_0,2,4);
BUTTON_SetBkColor(hBUTTON1,GUI_RED);
BUTTON_SetFont(hBUTTON1,&GUI_Font8x16);
fontshow 用户界面
BUTTON_SetState(hBUTTON1,
BUTTON_STATE_HASFOUS|BUTTON_STATE_INACTIVE):
进度条
hProg =PROGBAR_Create(20,250,200,20,WM_CF_SHOW);
PROGBAR_SetBarColor( hProg,0,GUI_RED);
PROGBAR_SetFont(hProg,& GUI_Font8x16);
PROGBAR_SetText(hProg,”HELLO”);
PROGBAR_SetValue(hProg,45);
3、用户输入函数
取按键值 int GUI_GetKey(void);
等待按键 int GUI_WaitKey(void);
存储键值 void GUI_StoreKey(int c);
清除键缓冲区 void GUI_ClearKeyBuffer(void);
读触摸屏状态 int GUI_TOUCH_GetState(GUI_HID_STATE *pState); 存触摸屏状态 void GUI_TOUCH_StoreState(int x, int y);
读触摸屏数据 unsigned int GetTouch_XY_AD(void);
实验内容
1、定义用户界面控制变量
窗口,文本输入框,按钮,进度条,普通文本
2、编写一个简单的用户界面
#include "..\inc\config.h"
OS_STK_DATA stk;
char data=0;
char *aBuffer;
OS_EVENT *Sem;
OS_EVENT *Key_Mbox;
extern const GUI_FONT CHINESE_FONT12;
extern const GUI_FONT CHINESE_FONT16;
extern const GUI_FONT GUI_Font8x16
void GUI(void);
extern void Uart_Printf(char *fmt,...);
fontshow 用户界面
#define OUTPORT (*(volatile unsigned *)0x8400000)
#define PHASE0 0x000A;
#define PHASE1 0x0006;
#define PHASE2 0x0005;
#define PHASE3 0x0009;
char CHAR_NUM[]={" HELLO WORLD!"};
void delay_f() //相延时子程序
{
unsigned int i;
for(i=1;i<4000;i++);//修改i的值,可以改变电机旋转的速度(大于800)
}
void delay_s() //步延时子程序
{
unsigned int j;
for(j=1;j<4000;j++);
}
/****************************************************************************** 分配各任务的堆栈容量
******************************************************************************/
OS_STK Stack_Task_1[STACKSIZE];
OS_STK Stack_Task_2[STACKSIZE];
OS_STK Stack_Task_3[STACKSIZE];
OS_STK Stack_Task_4[STACKSIZE];
OS_STK Stack_Task_5[STACKSIZE];
/******************************************************************************
- 函数名称 : Task_2(void *pdata)
- 函数说明 : GUI任务,优先级为56
- 输入参数 : pdata
- 输出参数 : 无
******************************************************************************/
//控件的句柄定义
BUTTON_Handle hButton1,hButton2;
EDIT_Handle hEdit,hEdit_CON;
TEXT_Handle hTEXT;
PROGBAR_Handle hProg;
FRAMEWIN_Handle hFRAM;
void Task_2(void *pdata)
{char time;
INT8U err;
hFRAM=FRAMEWIN_Create("Frame
Window",NULL,WM_CF_SHOW,10,10,220,300);
FRAMEWIN_SetFont(hFRAM,&GUI_Font8x16);
61阅读提醒您本文地址:
FRAMEWIN_SetTextColor (hFRAM,GUI_RED);
fontshow 用户界面
FRAMEWIN_SetBarColor(hFRAM,0,GUI_GREEN);
FRAMEWIN_SetTextAlign(hFRAM,GUI_TA_HCENTER);
hButton1=BUTTON_Create(160,100,60,30,' ',BUTTON_CF_SHOW);
hButton2=BUTTON_Create(160,140,60,30,' ',BUTTON_CF_SHOW);
BUTTON_SetText (hButton1, "OK");
BUTTON_SetText (hButton2, "Cancel");
hTEXT =EDIT_Create(40,60,100,150,' ',30,0);
EDIT_SetFont(hTEXT, &GUI_Font8x16);
FRAMEWIN_SetTextAlign(hTEXT,GUI_TA_LEFT);
hProg =PROGBAR_Create(20,250,200,20,WM_CF_SHOW);
GUI_SetColor(0x4Affff);
GUI_SetFont(&CHINESE_FONT16x1x2);
GUI_DispStringAt(CN_start"武夷学院"CN_end,80,380);
GUI_SetFont(&CHINESE_FONT16);
GUI_DispStringAt(CN_start"电子工程系"CN_end,80,420);
GUI_SetFont(&GUI_Font8x16);
GUI_DispStringAt("www.wuyiu.edu.cn",50,440);
GUI_Exec(); // 或 WM_Exec();
for(;;)
{ OSSemPend(Sem,0,&err);
for(time=0;time<100;time++)
{ PROGBAR_SetValue(hProg,time);
GUI_Exec();
Delay(100);
}
OSTimeDly(1000);
}
}
/******************************************************************************- 函数名称 : Task_4(void *pdata)
- 函数说明 : GUI任务,优先级为56
- 输入参数 : pdata
- 输出参数 : 无
*****************************************************************************/ void Task_4(void *pdata)
{
char rrr = 0;
char d0,d1,d2,d3,d4,d5,d6,d7;
for(;;)
{
rrr = (*(volatile unsigned char *)0x20000016);
d0 = rrr>>7&1;
d1 = rrr>>6&1;
d2 = rrr>>5&1;
fontshow 用户界面
d3 = rrr>>4&1;
d4 = rrr>>3&1;
d5 = rrr>>2&1;
d6 = rrr>>1&1;
d7 = rrr>>0&1;
data = (d7<<7|d6<<6|d5<<5|d4<<4|d3<<3|d2<<2|d1<<1|d0);
(*(volatile unsigned char *)0x20000000) = data;
OSTimeDly(50);
}
}
/****************************************************************************** - 函数名称 : Task_START
- 函数说明 : 更新LCD显示,优先级为5
- 输入参数 : pdata
- 输出参数 : 无
******************************************************************************/void Task_3(void *pdata)
{
for(;;)
{
// GUI_Exec();
GUI_CURSOR_SetPosition(42,62);
//GUI_CURSOR_Activate();
GUI_CURSOR_Show();
GUI_Exec();
OSTimeDly(500);
GUI_CURSOR_Deactivate();
GUI_Exec();
// GUI_CURSOR_Clear();
OSTimeDly(500);
}
}
/******************************************************************************- 函数名称 : Task_START
- 函数说明 : 系统启动后运行的第一个任务,,在LCD上画一矩形填充,优先级为5
- 输入参数 : pdata
- 输出参数 : 无
******************************************************************************/ void Task_1(void *pdata)
{
Timer1_Init(); //打开时钟节拍,让操作系统跑起来
OSTaskCreate(Task_2, (void *)0, (OS_STK *)&Stack_Task_2[(STACKSIZE) - 1], 56); //在任务里创建另一个任务
fontshow 用户界面
OSTaskCreate(Task_3, (void *)0, (OS_STK *)&Stack_Task_3[(STACKSIZE) - 1], 50); OSTaskCreate(Task_4, (void *)0, (OS_STK *)&Stack_Task_4[(STACKSIZE) - 1], 45); for(;;)
{
GUI_SetColor(GUI_BLUE);
GUI_SetBkColor(GUI_BLUE);
GUI_FillRect(0,0,639,479);
GUI_SetColor(GUI_WHITE);
GUI_Exec();
OSTimeDly(1000);
OSSemPost(Sem);
}
}
/******************************************************************************- 函数名称 : Main(void)
- 函数说明 : 系统的主程序入口
- 输入参数 : 无
- 输出参数 : 无
******************************************************************************/void Main(void)
{
Target_Init();
LCD_Init(); // ARMII实验系统的初始化,包括CPU板 GUI_Init();
OSInit(); // 操作系统的初始化 Sem = OSSemCreate(1);//创建信号量
Key_Mbox = OSMboxCreate((void *)0);
OSTaskCreate(Task_1, (void *)0, (OS_STK *)&Stack_Task_1[STACKSIZE - 1], 5); //创建任务一
OSStart();
}
3、编写一个任务,每隔1000个节拍,清除LCD内容,延时500个节拍后发出更新界面信号。[www.61k.com]
void Task_5(void *pdata)
{
for(;;)
{
GUI_SetColor(GUI_BLUE);
GUI_SetBkColor(GUI_BLUE);
GUI_FillRect(0,0,639,479);
Delay(500);
OSTimeDly(1000);
}
}
fontshow 用户界面
实验步骤
1、 连接实验箱与计算机的串口线,打开计算机超级终端,并设定为com1,115200,8,1,0N
2、 连接仿真调试电缆(并口JTAG)
3、 实验箱上电,并在vivi的指示下,按任意键,进入调试程序状态。(www.61k.com]
4、 打开ARM集成开发环境ADS,按要求编写或打开实验程序。
5、 按内容要求编写,调试程序,并记录调试过程和数据。
61阅读提醒您本文地址:
6、 调试完毕,整理实验箱,并切断实验箱电源。
实验思考题
1、编写一个任务,每隔100个节拍给界面中的文本编辑框添加一个字符。 答:char CHAR_NUM[]={" HELLO WORLD!"};
void Task_5(void *pdata)
{//static char num=0;
char num=0;
for(;;)
{
for(num=0;num<13;num++)
{
EDIT_AddKey(hTEXT,CHAR_NUM[num]);
GUI_Exec();
OSTimeDly(200);
}
}
}
61阅读提醒您本文地址:
五 : Blogger发布全新用户界面
Blogger 团队在SXSW 现场向观众展示了全新的使用了Google Web Toolkit 技术的用户编辑器以及控制面板,以及一个全新的帮助用户在当前阅读文章基础上寻找更多感兴趣内容的推荐系统。
增加了模板设计,实时统计,垃圾留言过滤,移动模板,web 字体等等功能。
2010 是Blogger 成功的一年,我们来看一组直观的数字吧:
Blogger 已经是世界第六大网站;
超过5亿篇blog文章;
总字数超过5000亿(相当于530万本小说);
每分钟新增25万字(相当于 Blogger 用户每天写出5000本小说);
4亿活跃读者,超过了整个南美洲的总人口和(这个数字在7年前仅仅是25万);
支持50种语言;
75% 的流量来自美国以外地区。
本文标题:用户界面-Quora界面两点新变化 帮用户发现感兴趣内容61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1