83右边数码宝贝第三季个数是几

您现在的位置:
日GMAT数学机经整理(2).
  6月6日GMAT换库后,现在小编来为大家整理六月份的GMAT数学机经,部分带答案,分享给大家,希望对大家有所帮助,文中观点仅供参考。
  82.连续的10个数,后一个数比前一个数多4,10个数的和是360,求第三个数是多少?
  设第一个数是x,第十个数x+4*9
  (x+x+36)*10/2=360,x=18第三个数18+4*2=26
  83.还有一题几何题。两个圆既与x轴相切,本身两个圆也相切,圆1的圆心到x轴的距离是4,圆2的圆心到x轴的距离则是6,问穿过圆1与圆2的圆心的直线斜率是多少。
  因为与x轴相切,所以到x轴的距离就是半径。两圆半径分别为4和6。并且两圆的纵坐标分别为 两圆相切有内切和外切两种情况
  内切:此时两圆圆心连线垂直于x轴,斜率不存在。
  外切:(x1-x2)^2+(y1-y2)^2=(6+4)^2
  这个有4种情况,圆1在圆2左边。右边。下边。上边。
  在上或下的时候斜率不存在。左边斜率:1/2 右边斜率:-1/2 最后 大概是图上的意思。没画大圆在下面的情况。
  84.还有一题DS,P是一个positive prime, n是一个positive
integer,问S=3^n*P^2有多少个factor。
  (1)n等于某个数
  (2)P等于某个数
  题目的关键是p和3的关系。
  如果p=3:s=3^(n+2),因子数就是n+3个
  P :因子数是3(n+1)个。
  所以pn都要知道,因此选择C
  86.x^2+y^2=10, 问有多少整数组成的点在这个图形上。
  (1,3)(1,-3)(-1,3)(-1,-3)(3,1)(3,-1)(-3,1)(-3,-1)一共8个
  87.X的个位数大于一,然后问它的个位数是多少.A.x与x三次方的个位数一样.B.x的平方个位数为1 答案应该是B吧
  1&符合的有4,5,6,9insufficient
  2&符合的:9
  88.p是质数.m为正整数,问p的m次方是不是完美平方数,
  (1)p是偶数
  (2)m是偶数
  【v2】有个DS题,m是prime number, p是positive integer, p^m的perfet square是不是整数
  (1)m is even
  (2)p is even
  平方数就是开平方是整数。
  1&p=2,insufficient。
  2&p的m次方=[p^(m/2)]^2.sufficient B
  90.有一题挺难的:设X=-1,n是第404个质数(prime number),求:x+x^n+x^n+1+x^n+2.
404个质数谁知道是哪个啊?但是肯定有规律的,不用一个个数到404.不知道谁知道。我选0
  第404个质数,肯定是奇数。
  x+x^n+x^(n+1)+x^(n+2)因此原式=-1-1+1-1=-2
  以上就是6月20日GMAT数学机经的全部内容,分享给大家,希望对大家有所帮助。最后祝大家都能考出好成绩。
明明已经有顾问了
【解答】&同学你好!我是内蒙澳际美国部的陶老师。 主校区位于美国中西部.
美国顶级名校申请专家傲美达,为您提供美国留学申请全方位的本科、研究生及MBA入学申请指导服务。全心致力于帮助中国申请者进入全球顶尖院校。导师毕业于美国常春藤名校,留学申请成功率是96%。
日韩新马港研究生申请条件及申请材料的准备,留学费用全盘解析。
如何进行加拿大留学申请,加拿大高中留学申请,加拿大专科留学申请,加拿大本科留学申请,加拿大研究生留学申请进行介绍。内容包含加拿大留学申请材料,澳际加拿大留学成功案例,加拿大留学时间规划,申请方案等
① 本网独家发布的稿件和图片,未经本网允许,不得转载使用。获授权转载时务必注明来源。
② 本网转载其他媒体稿件是为了传播更多的信息,此类稿件不代表本网观点。如果本网转载的稿件涉及您的版权、名誉权等问题,请尽快与本网联系,本网将依照国家相关法律法规尽快妥善处理。
北京澳际教育咨询有限公司 版权所有 & 2000 - 2015 澳际教育, All Rights Reserved
总部地址:北京市东城区 灯市口大街33号 国中商业大厦2-3层
联系电话:400-601-0022
京ICP证050284号
京公网安备号
京东工商留学广审[2003]年 第0008号有一串数列三七十一十五十九二十三等等一第31个数是多少啊83是第几个数3 7 11_百度知道
有一串数列三七十一十五十九二十三等等一第31个数是多少啊83是第几个数3 7 11
我有更好的答案
3+4(N-1)N代表第几个数第31个数是12383是第21个数
采纳率:47%
第31个是123,83是第21个数
这是首项为3公差为4的递增等差数列
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。第83节:矩阵键盘输入任意数字或小数点的液晶屏显示程序
> 第83节:矩阵键盘输入任意数字或小数点的液晶屏显示程序
第83节:矩阵键盘输入任意数字或小数点的液晶屏显示程序
开场白:本来这节打算讲调用液晶屏内部字库时让某行内容反显的,但是在昨天调试过程中,发现一个很奇怪的问题,当调用内部字库时,按照数据手册,我执行一条反显指令时,应该是仅仅某一行反显,但是却同时出现两行反显。比如,当我执行
WriteCommand(0x34); //扩充指令集
WriteCommand(0x04); //第1行反显指令时,发现第一行和第三行反显,后来想想,我猜测这种12864的屏应该是25632折成左右半屏,左半屏在上面,右半屏在下面。经过这次经验,我觉得大家以后尽量不要用液晶屏的内部字库模式,应该用自构字库的模式(图形模式)。因为我觉得用内部字库模式的时候,这个集成的反显扩展指令不好用。而用自构字库的模式(图形模式),却可以顺心所欲的灵活运用,适合做菜单程序。既然发现内部字库不好用,所以不再讲内部字库模式,这节仅仅接着前面第79节内容,继续讲在自构字库的模式(图形模式)下,如何通过矩阵键盘直接输入数字和小数点,就像普通的计算器一样键盘输入。这个功能表面简单,其实有以下四个地方值得注意:第一:如何用数组接收按键输入的BCD码数据。第二:如何限制输入参数的小数点个数和数组的有效个数。第三:如果第0个位置是0,那么继续输入的数据直接覆盖0,否则就移位再输入。第四:如果第0个位置是0,那么继续输入的小数点要移位输入。要仔细了解以上提到的关键点,必须好好研究本程序中的void set_data(&)函数。同时也要温习一下之前讲的自构字库模式的液晶屏显示内容,尤其是插入画布显示的内容。具体内容,请看源代码讲解。(1) 硬件平台:基于朱兆祺51单片机学习板。数字1键对应S1键,数字2键对应S2键,数字3键对应S3键&. 数字9键对应S9键, 数字0键对应S10键。小数键对应S11,清零键对应S16,其它按键不用。(2) 实现功能:用矩阵键盘输入任意数字或小数点。小数点不能超过2位,一旦超过2位,再按其它按键则输入无效。有效数字也不能超过6位(包括小数点),一旦超过6位,再按其它按键则输入无效。想重新输入,必须按S16清零按键才能重新输入。(3)源代码讲解如下:#include "REG52.H"#define const_voice_short40 //蜂鸣器短叫的持续时间#define const_key_time10
//按键去抖动延时的时间sbit key_sr1=P0^0; //第一行输入sbit key_sr2=P0^1; //第二行输入sbit key_sr3=P0^2; //第三行输入sbit key_sr4=P0^3; //第四行输入sbit key_dr1=P0^4; //第一列输出sbit key_dr2=P0^5; //第二列输出sbit key_dr3=P0^6; //第三列输出sbit key_dr4=P0^7; //第四列输出sbit beep_dr=P2^7; //蜂鸣器的驱动IO口sbitLCDCS_dr= P1^6;//片选线sbitLCDSID_dr = P1^7;//串行数据线sbitLCDCLK_dr = P3^2;//串行时钟线sbitLCDRST_dr = P3^4;//复位线void SendByteToLcd(unsigned char ucData);//发送一个字节数据到液晶模块void SPIWrite(unsigned char ucWData, unsigned char ucWRS); //模拟SPI发送一个字节的命令或者数据给液晶模块的底层驱动void WriteCommand(unsigned char ucCommand); //发送一个字节的命令给液晶模块void LCDWriteData(unsigned char ucData); //发送一个字节的数据给液晶模块void LCDInit(void);//初始化函数内部包括液晶模块的复位void display_clear(unsigned char ucFillDate); // 清屏 全部显示空填充0x00 全部显示点阵用0xffvoid insert_buffer_to_canvas(unsigned int x,unsigned int y,const unsigned char*ucArray,unsigned char ucFbFlag,unsigned int x_amount,unsigned int y_amount);//把字模插入画布.void display_lattice(unsigned int x,unsigned int y,const unsigned char*ucArray,unsigned char ucFbFlag,unsigned int x_amount,unsigned int y_amount,unsigned int uiOffSetAddr); //显示任意点阵函数unsigned char *number_to_matrix(unsigned charucBitNumber); //把一位数字转换成字模首地址的函数void delay_short(unsigned int uiDelayshort); //延时void delay_long(unsigned int uiDelayLong);void key_number_input(unsigned char ucKeyNumber); //输入数字按键void set_data(unsigned char ucKeyNumberTemp,unsigned char ucDotBitMax,unsigned char ucDataCntMax,unsigned char *p_ucDotCnt,unsigned char *p_ucDotBitS,unsigned char *p_ucWdPartCnt,unsigned char *p_ucSetDataBuffer);void key_delete_input(void); //删除按键void T0_time(); //定时中断函数void key_service();void key_scan(); //按键扫描函数 放在定时中断里void initial_myself(); void initial_peripheral();void lcd_display_service(void); //应用层面的液晶屏显示程序void clear_all_canvas(void);//把画布全部清零code unsigned char Zf816_0[]={/*--文字:0--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,};code unsigned char Zf816_1[]={/*--文字:1--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,};code unsigned char Zf816_2[]={/*--文字:2--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,};code unsigned char Zf816_3[]={/*--文字:3--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,};code unsigned char Zf816_4[]={/*--文字:4--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,};code unsigned char Zf816_5[]={/*--文字:5--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,};code unsigned char Zf816_6[]={/*--文字:6--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,};code unsigned char Zf816_7[]={/*--文字:7--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,};code unsigned char Zf816_8[]={/*--文字:8--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,};code unsigned char Zf816_9[]={/*--文字:9--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,};code unsigned char Zf816_nc[]=//空字模{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};code unsigned char Zf816_dot[]=//小数点{/*--文字:.--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,};code unsigned char Zf816_mao_hao[]=//冒号{/*--文字::--*//*--宋体12;此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,};code unsigned char Hz1616_yi[]={/*--文字:一--*//*--宋体12;此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};code unsigned char Hz1616_xiang[]={/*--文字:项--*//*--宋体12;此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x03,0xFE,0xFC,0x20,0x10,0x40,0x11,0xFC,0x11,0x04,0x11,0x24,0x11,0x24,0x11,0x24,0x11,0x24,0x1D,0x24,0xE1,0x34,0x00,0x48,0x01,0x86,0x06,0x02,0x00,0x00,};code unsigned char Hz1616_shu[]={/*--文字:数--*//*--宋体12;此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x20,0x49,0x30,0x2A,0x20,0x1C,0x20,0xFF,0x7E,0x1C,0x44,0x2B,0x44,0x48,0xC4,0x08,0x28,0xFF,0x28,0x12,0x10,0x34,0x10,0x0C,0x28,0x32,0x4E,0xC0,0x84,0x00,0x00,};code unsigned char Hz1616_zhu[]={/*--文字:组--*//*--宋体12;此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x00,0x19,0xF8,0x11,0x08,0x25,0x08,0x25,0x08,0x79,0xF8,0x09,0x08,0x11,0x08,0x21,0x08,0x7D,0xF8,0x01,0x08,0x01,0x08,0x0D,0x08,0x73,0xFE,0x00,0x00,0x00,0x00,};/* 注释一:* 以下是画布显示数组。横向是6个字节,纵向16行,可以显示3个16x16的汉字.*注意,这节内容的画布跟前面章节的画布大小不一样,前面章节的横向是4个字节,这节的横向是6个字节。*/unsigned char ucCanvasBuffer[]={0x00,0x00,0x00,0x00,0x00,0x00,//上半屏0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//------------上半屏和下半屏的分割线-----------0x00,0x00,0x00,0x00,0x00,0x00,//下半屏0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/* 注释二:* 以下4个变量记录一个参数的4种信息,包括小数点的数量,个数,数据的位置,数组具体值.*/unsigned char ucDotCnt_1=0;//记录当前输入的小数点数量,如果小数点的数量不为0,说明当前数组已包含小数点,此时再按小数点按键则无效unsigned char ucDotBitS_1=0; //记录当前输入的小数点个数,如果小数点的个量如果超过规定2位,此时再按任何输入按键则无效unsigned char ucWdPartCnt_1=0; //记录当前输入的数据在数组中的位置。unsigned char ucDataBuffer_1[6]={0,10,10,10,10,10}; //一项的BCD码数组缓冲unsigned char ucKeyStep=1;//按键扫描步骤变量unsigned char ucKeySec=0; //被触发的按键编号unsigned intuiKeyTimeCnt=0; //按键去抖动延时计数器unsigned char ucKeyLock=0; //按键触发后自锁的变量标志unsigned char ucRowRecord=1; //记录当前扫描到第几列了unsigned intuiVoiceCnt=0;//蜂鸣器鸣叫的持续时间计数器unsigned char ucWd=1; //窗口变量unsigned char ucPart=1; //局部变量 0代表没有选中任何一行,其它数值1到4代表选中某一行unsigned char ucWd1Update=1; //窗口1的整屏更新显示变量
1代表更新显示,响应函数内部会清零unsigned char ucWd1Part1Update=0; //窗口1的第1行局部更新显示变量1代表更新显示,响应函数内部会清零void main(){
initial_myself();
//第一区,上电后马上初始化
delay_long(100);
//一线,延时线。延时一段时间
initial_peripheral();//第二区,上电后延时一段时间再初始化
while(1) //第三区
key_service(); //按键服务程序
lcd_display_service(); //应用层面的液晶屏显示程序
}}void initial_myself()//第一区 上电后马上初始化{ beep_dr=1; //用PNP三极管控制蜂鸣器,输出高电平时不叫。 TMOD=0x01;//设置定时器0为工作方式1 TH0=0xf8; //重装初始值()=f TL0=0x2f;}void initial_peripheral() //第二区 上电后延时一段时间再初始化{
LCDInit(); //初始化12864 内部包含液晶模块的复位
EA=1; //开总中断
//允许定时中断
//启动定时中断}void T0_time() interrupt 1{TF0=0;//清除中断标志TR0=0; //关中断key_scan();//按键扫描函数 放在定时中断里if(uiVoiceCnt!=0){ uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停止鸣叫
beep_dr=0;//蜂鸣器是PNP三极管控制,低电平就开始鸣叫。}else{ ; //此处多加一个空指令,想维持跟if括号语句的数量对称,都是两条指令。不加也可以。
beep_dr=1;//蜂鸣器是PNP三极管控制,高电平就停止鸣叫。}TH0=0xf8; //重装初始值()=fTL0=0x2f;TR0=1;//开中断}void key_scan()//按键扫描函数 放在定时中断里{switch(ucKeyStep){ case 1: //按键扫描输出第ucRowRecord列低电平
if(ucRowRecord==1)//第一列输出低电平
key_dr1=0;
key_dr2=1;
key_dr3=1;
key_dr4=1;
else if(ucRowRecord==2)//第二列输出低电平
key_dr1=1;
key_dr2=0;
key_dr3=1;
key_dr4=1;
else if(ucRowRecord==3)//第三列输出低电平
key_dr1=1;
key_dr2=1;
key_dr3=0;
key_dr4=1;
else //第四列输出低电平
key_dr1=1;
key_dr2=1;
key_dr3=1;
key_dr4=0;
uiKeyTimeCnt=0;//延时计数器清零
ucKeyStep++; //切换到下一个运行步骤 case 2: //此处的小延时用来等待刚才列输出信号稳定,再判断输入信号。不是去抖动延时。
uiKeyTimeCnt++;
if(uiKeyTimeCnt>1)
uiKeyTimeCnt=0;
ucKeyStep++; //切换到下一个运行步骤
if(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==1)
ucKeyStep=1;//如果没有按键按下,返回到第一个运行步骤重新开始扫描
ucKeyLock=0;//按键自锁标志清零
uiKeyTimeCnt=0; //按键去抖动延时计数器清零,此行非常巧妙
ucRowRecord++;//输出下一列
if(ucRowRecord>4)
ucRowRecord=1; //依次输出完四列之后,继续从第一列开始输出低电平
else if(ucKeyLock==0)//有按键按下,且是第一次触发
if(key_sr1==0&&key_sr2==1&&key_sr3==1&&key_sr4==1)
uiKeyTimeCnt++;//去抖动延时计数器
if(uiKeyTimeCnt>const_key_time)
uiKeyTimeCnt=0;
ucKeyLock=1;//自锁按键置位,避免一直触发,只有松开按键,此标志位才会被清零
if(ucRowRecord==1)//第一列输出低电平
ucKeySec=1;//触发1号键 对应朱兆祺学习板的S1键
else if(ucRowRecord==2)//第二列输出低电平
ucKeySec=2;//触发2号键 对应朱兆祺学习板的S2键
else if(ucRowRecord==3)//第三列输出低电平
ucKeySec=3;//触发3号键 对应朱兆祺学习板的S3键
else //第四列输出低电平
ucKeySec=4;//触发4号键 对应朱兆祺学习板的S4键
else if(key_sr1==1&&key_sr2==0&&key_sr3==1&&key_sr4==1)
uiKeyTimeCnt++;//去抖动延时计数器
if(uiKeyTimeCnt>const_key_time)
uiKeyTimeCnt=0;
ucKeyLock=1;//自锁按键置位,避免一直触发,只有松开按键,此标志位才会被清零
if(ucRowRecord==1)//第一列输出低电平
ucKeySec=5;//触发5号键 对应朱兆祺学习板的S5键
else if(ucRowRecord==2)//第二列输出低电平
ucKeySec=6;//触发6号键 对应朱兆祺学习板的S6键
else if(ucRowRecord==3)//第三列输出低电平
ucKeySec=7;//触发7号键 对应朱兆祺学习板的S7键
else //第四列输出低电平
ucKeySec=8;//触发8号键 对应朱兆祺学习板的S8键
else if(key_sr1==1&&key_sr2==1&&key_sr3==0&&key_sr4==1)
uiKeyTimeCnt++;//去抖动延时计数器
if(uiKeyTimeCnt>const_key_time)
uiKeyTimeCnt=0;
ucKeyLock=1;//自锁按键置位,避免一直触发,只有松开按键,此标志位才会被清零
if(ucRowRecord==1)//第一列输出低电平
ucKeySec=9;//触发9号键 对应朱兆祺学习板的S9键
else if(ucRowRecord==2)//第二列输出低电平
ucKeySec=10;//触发10号键 对应朱兆祺学习板的S10键
else if(ucRowRecord==3)//第三列输出低电平
ucKeySec=11;//触发11号键 对应朱兆祺学习板的S11键
else //第四列输出低电平
ucKeySec=12;//触发12号键 对应朱兆祺学习板的S12键
else if(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==0)
uiKeyTimeCnt++;//去抖动延时计数器
if(uiKeyTimeCnt>const_key_time)
uiKeyTimeCnt=0;
ucKeyLock=1;//自锁按键置位,避免一直触发,只有松开按键,此标志位才会被清零
if(ucRowRecord==1)//第一列输出低电平
ucKeySec=13;//触发13号键 对应朱兆祺学习板的S13键
else if(ucRowRecord==2)//第二列输出低电平
ucKeySec=14;//触发14号键 对应朱兆祺学习板的S14键
else if(ucRowRecord==3)//第三列输出低电平
ucKeySec=15;//触发15号键 对应朱兆祺学习板的S15键
else //第四列输出低电平
ucKeySec=16;//触发16号键 对应朱兆祺学习板的S16键
}}}void key_service() //按键服务的应用程序{switch(ucKeySec) //按键服务状态切换{
case 1:// 数字1 对应朱兆祺学习板的S1键
key_number_input(1); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 2:// 数字2 对应朱兆祺学习板的S2键
key_number_input(2); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 3:// 数字3 对应朱兆祺学习板的S3键
key_number_input(3); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 4:// 数字4 对应朱兆祺学习板的S4键
key_number_input(4); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 5:// 数字5 对应朱兆祺学习板的S5键
key_number_input(5); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 6:// 数字6 对应朱兆祺学习板的S6键
key_number_input(6); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 7:// 数字7 对应朱兆祺学习板的S7键
key_number_input(7); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 8: //数字8 对应朱兆祺学习板的S8键
key_number_input(8); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 9:// 数字9 对应朱兆祺学习板的S9键
key_number_input(9); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 10:// 数字0对应朱兆祺学习板的S10键
key_number_input(0); //输入数字按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 11:// 小数点按键 对应朱兆祺学习板的S11键
key_number_input(11); //输入数字按键11代表小数点
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 12:// 本节暂时不用 对应朱兆祺学习板的S12键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 13:// 本节暂时不用 对应朱兆祺学习板的S13键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 14:// 本节暂时不用对应朱兆祺学习板的S14键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 15:// 本节暂时不用 对应朱兆祺学习板的S15键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
case 16:// 清除按键 对应朱兆祺学习板的S16键
key_delete_input(); //删除按键
uiVoiceCnt=const_voice_ //按键声音触发,滴一声就停。
ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发 }
}void key_number_input(unsigned char ucKeyNumber) //输入数字按键{
switch(ucWd)
case 1: //第1窗口。本节程序只有1个窗口
switch(ucPart)
case 1://1窗口第1项
set_data(ucKeyNumber,2,6,&ucDotCnt_1,&ucDotBitS_1,&ucWdPartCnt_1,ucDataBuffer_1); //设置参数,请看本函数具体内容。本节的核心内容,值得好好研究!
ucWd1Part1Update=1;//更新显示
}/* 注释三:* 本节的核心函数,值得好好研究!* 涉及到参数的4种信息,包括小数点的数量,个数,数据的位置,数组具体值。以及它们之间的相互作用关系。* 以下参数,指针类型的参数是让代入的全局变量在退出函数后维持它当前最新更改的数值不变。* 第1个参数ucKeyNumberTemp是当前按键输入的数值。* 第2个参数ucDotBitMax是限定被设置参数的小数点最大位数。* 第3个参数ucDataCntMax是限定被设置参数的最大数组个数。* 第4个参数*p_ucDotCnt是记录当前输入的小数点数量,如果小数点的数量不为0,说明当前数组已包含小数点,此时再按小数点按键则无效。* 第5个参数*p_ucDotBitS是记录当前输入的小数点个数,如果小数点的个量如果超过规定2位,此时再按任何输入按键则无效* 第6个参数*p_ucWdPartCnt是记录当前输入的数据在数组中的位置,方便锁定每次按键输入的数字显示位置。* 第7个参数*p_ucSetDataBuffer是BCD码数组缓冲的具体数字内容。*/void set_data(unsigned char ucKeyNumberTemp,unsigned char ucDotBitMax,unsigned char ucDataCntMax,unsigned char *p_ucDotCnt,unsigned char *p_ucDotBitS,unsigned char *p_ucWdPartCnt,unsigned char *p_ucSetDataBuffer){
if(ucKeyNumberTemp==11) //等于小数点
if(ucDotBitMax==0) //如果限定的小数点最大数是0,就意味着此数据不允许带小数点,必须是整数。
{ //直接返回退出
else if(*p_ucDotCnt>0)//小数点个数大于0,意味着当前数组已经包含了小数点,此时再输入小数点则无效。
{ //直接返回退出
else//否则有效,记录当前已经包含一个小数点的信息。
*p_ucDotCnt=1;//只能包含一个小数点
else if(*p_ucDotCnt==1) //如果输入的不是小数点,并且之前已经输入了一个小数点,那么此时输入的数字就是小数点后的数据
if(*p_ucDotBitS<ucDotBitMax) //如果小数点位数还没超过最大限制位数,则继续加1记录当前小数点位数。
*p_ucDotBitS=(*p_ucDotBitS)+1;
else //如果小数点位数已经超过允许的范围,则输入的按键无效,直接退出。
{ //直接返回退出
if(*p_ucWdPartCnt<(ucDataCntMax-1))//当输入的有效BCD码不超过最大数组缓冲时
if(*p_ucWdPartCnt==0&&p_ucSetDataBuffer[0]==0&&ucKeyNumberTemp!=11)//如果当前默认位置是第0个位置,并且默认第0个数据是0,并且当前的按键输入不是小数点,则不用移位
else//否则,移位
for(i=0;i<(ucDataCntMax-1);i++)//移位
p_ucSetDataBuffer[ucDataCntMax-1-i]=p_ucSetDataBuffer[ucDataCntMax-2-i];
*p_ucWdPartCnt=(*p_ucWdPartCnt)+1;
p_ucSetDataBuffer[0]=ucKeyNumberT //当前输入的数字或者小数点永远在第右边第0个位置。
}}void key_delete_input(void) //删除按键{
switch(ucWd)
case 1: //第1窗口。本节程序只有1个窗口
switch(ucPart)
case 1://1窗口第1项
ucDotBitS_1=0;
ucDotCnt_1=0;
ucWdPartCnt_1=0;
for(i=0;i<6;i++)
ucDataBuffer_1[i]=10;
ucDataBuffer_1[0]=0; //第0个位置填入0
ucWd1Part1Update=1;//更新显示
}unsigned char *number_to_matrix(unsigned charucBitNumber){
unsigned char *p_ucAnyN//此指针根据ucBitNumber数值的大小,分别调用不同的字库。
switch(ucBitNumber)//根据ucBitNumber数值的大小,分别调用不同的字库。
p_ucAnyNumber=Zf816_0;
p_ucAnyNumber=Zf816_1;
p_ucAnyNumber=Zf816_2;
p_ucAnyNumber=Zf816_3;
p_ucAnyNumber=Zf816_4;
p_ucAnyNumber=Zf816_5;
p_ucAnyNumber=Zf816_6;
p_ucAnyNumber=Zf816_7;
p_ucAnyNumber=Zf816_8;
p_ucAnyNumber=Zf816_9;
case 10://空格
p_ucAnyNumber=Zf816_
case 11: //小数点
p_ucAnyNumber=Zf816_
default: //如果上面的条件都不符合,那么默认指向空字模
p_ucAnyNumber=Zf816_
return p_ucAnyN//返回转换结束后的指针}void lcd_display_service(void) //应用层面的液晶屏显示程序{
static unsigned char *p_ucAnyN //经过数字转换成字模后,分解变量的某位字模首地址
static unsigned char ucCursorF//光标标志,也就是反显的标志,它是根据局部变量ucPart来定的
switch(ucWd)//本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
case 1: //显示窗口1的数据
if(ucWd1Update==1)//窗口1整屏更新,里面只放那些不用经常刷新显示的内容
ucWd1Update=0;//及时清零,避免一直更新
ucWd1Part1Update=1; //激活窗口1的第1行局部更新显示变量,这里在前面数码管显示框架上有所改进
display_clear(0x00); // 清屏操作, 全部显示空填充0x00,全部显示点阵用0xff。
clear_all_canvas();//把画布全部清零
display_lattice(0,0,Hz1616_yi,0,2,16,0);
//一窗口一行,这些内容不用经常更新,只有在切换窗口的时候才更新显示
display_lattice(1,0,Hz1616_xiang,0,2,16,0);
display_lattice(2,0,Hz1616_shu,0,2,16,0);
display_lattice(3,0,Hz1616_zhu,0,2,16,0);
display_lattice(4,0,Zf816_mao_hao,0,1,16,0); //冒号
if(ucWd1Part1Update==1) //窗口1的第1行局部更新显示变量,里面放一些经常需要刷新显示的内容
ucWd1Part1Update=0; //及时清零,避免一直更新
if(ucPart==1) //被选中
ucCursorFlag=1; //反显 显示
else //没被选中
ucCursorFlag=0; //正常 显示
for(i=0;i<6;i++) //把每个数组缓冲的字模依次插入画布
p_ucAnyNumber=number_to_matrix(ucDataBuffer_1[5-i]);
insert_buffer_to_canvas(i,0,p_ucAnyNumber,0,1,16);//这里的i是画布的横向地址,一共可以显示6个字符,因此取值范围是0到5
display_lattice(5,0,ucCanvasBuffer,ucCursorFlag,6,16,0); //显示整屏的画布,最后的参数0是偏移量
//本程序只有1个窗口,所以只有一个case 1,如果要增加窗口,就直接增加 case 2, case 3...
}}void clear_all_canvas(void)//把画布全部清零{ unsigned int j=0; unsigned int i=0; for(j=0;j<16;j++)//这里的16表示画布有16行 {
for(i=0;i<4;i++) //这里的4表示画布每行有4个字节
ucCanvasBuffer[j*4+i]=0x00;
}void display_clear(unsigned char ucFillDate) // 清屏全部显示空填充0x00 全部显示点阵用0xff{
unsigned char x,y;
WriteCommand(0x34);//关显示缓冲指令
WriteCommand(0x34);//关显示缓冲指令故意写2次,怕1次关不了 这个是因为我参考到某厂家的驱动程序也是这样写的
while(y<32)//y轴的范围0至31
WriteCommand(y+0x80);
//垂直地址
WriteCommand(0x80);
//水平地址
for(x=0;x<32;x++)//256个横向点,有32个字节
LCDWriteData(ucFillDate);
WriteCommand(0x36); //开显示缓冲指令}/* 注释四:* 注意,这节内容的画布跟前面章节的画布大小不一样,前面章节的横向是4个字节,这节的横向是6个字节。* 把字模插入画布的函数.* 这是本节的核心函数,读者尤其要搞懂x_amount和y_amount对应的显示关系。* 第1,2个参数x,y是在画布中的坐标体系。* x的范围是0至5,因为画布的横向只要6个字节。y的范围是0至15,因为画布的纵向只有16行。* 第3个参数*ucArray是字模的数组。* 第4个参数ucFbFlag是反白显示标志。0代表正常显示,1代表反白显示。* 第5,6个参数x_amount,y_amount分别代表字模数组的横向有多少个字节,纵向有几横。*/void insert_buffer_to_canvas(unsigned int x,unsigned int y,const unsigned char*ucArray,unsigned char ucFbFlag,unsigned int x_amount,unsigned int y_amount){ unsigned int j=0; unsigned int i=0; unsigned char ucT for(j=0;j<y_j++) {
for(i=0;i<x_i++)
ucTemp=ucArray[j*x_amount+i];
if(ucFbFlag==0)
ucCanvasBuffer[(y+j)*6+x+i]=ucT //这里的6代表画布每一行只有6个字节。前面章节的横向是4个字节,要稍微注意的。
ucCanvasBuffer[(y+j)*6+x+i]=~ucT //这里的6代表画布每一行只有6个字节。前面章节的横向是4个字节,要稍微注意的。
}/* 注释五:* 显示任意点阵函数.* 注意,本函数在前几节的基础上多增加了第7个参数uiOffSetAddr,它是偏移地址。* 对于这个函数,读者尤其要搞懂x_amount和y_amount对应的显示关系。* 第1,2个参数x,y是坐标体系。x的范围是0至15,y的范围是0至31.* 第3个参数*ucArray是字模的数组。* 第4个参数ucFbFlag是反白显示标志。0代表正常显示,1代表反白显示。* 第5,6个参数x_amount,y_amount分别代表字模数组的横向有多少个字节,纵向有几横。* 第7个参数uiOffSetAddr是偏移地址,代表字模数组的从第几个数据开始显示。*/void display_lattice(unsigned int x,unsigned int y,const unsigned char*ucArray,unsigned char ucFbFlag,unsigned int x_amount,unsigned int y_amount,unsigned int uiOffSetAddr){ unsigned int j=0; unsigned int i=0; unsigned char ucT//注意,要把以下两行指令屏蔽,否则屏幕在更新显示时会整屏闪动//WriteCommand(0x34);//关显示缓冲指令
//WriteCommand(0x34);//关显示缓冲指令故意写2次,怕1次关不了 这个是因为我参考到某厂家的驱动程序也是这样写的 for(j=0;j<y_j++) //y_amount代表y轴有多少横 {
WriteCommand(y+j+0x80);
//垂直地址
WriteCommand(x+0x80);
//水平地址
for(i=0;i<x_i++) //x_amount代表x轴有多少列
ucTemp=ucArray[j*x_amount+i+uiOffSetAddr]; //uiOffSetAddr是字模数组的偏移地址
if(ucFbFlag==1)//反白显示
ucTemp=~ucT
LCDWriteData(ucTemp);
delay_short(30000);//把上一节这个延时函数去掉,加快刷屏速度
} } WriteCommand(0x36); //开显示缓冲指令}void SendByteToLcd(unsigned char ucData)//发送一个字节数据到液晶模块{
for ( i = 0; i < 8; i++ )
if ( (ucData << i) & 0x80 )
LCDSID_dr = 1;
LCDSID_dr = 0;
LCDCLK_dr = 0;
LCDCLK_dr = 1;
}}void SPIWrite(unsigned char ucWData, unsigned char ucWRS) //模拟SPI发送一个字节的命令或者数据给液晶模块的底层驱动{
SendByteToLcd( 0xf8 + (ucWRS << 1) );
SendByteToLcd( ucWData & 0xf0 );
SendByteToLcd( (ucWData << 4) & 0xf0);}void WriteCommand(unsigned char ucCommand) //发送一个字节的命令给液晶模块{
LCDCS_dr = 0;
LCDCS_dr = 1;
SPIWrite(ucCommand, 0);
delay_short(90);}void LCDWriteData(unsigned char ucData)//发送一个字节的数据给液晶模块{
LCDCS_dr = 0;
LCDCS_dr = 1;
SPIWrite(ucData, 1);}void LCDInit(void) //初始化函数内部包括液晶模块的复位{
LCDRST_dr = 1;//复位
LCDRST_dr = 0;
LCDRST_dr = 1;}void delay_short(unsigned int uiDelayShort) //延时函数{ for(i=0;i<uiDelaySi++) { ; }}void delay_long(unsigned int uiDelayLong){ for(i=0;i<uiDelayLi++) {
for(j=0;j<500;j++)//内嵌循环的空指令数量
{ //一个分号相当于执行一条空语句
} }}总结陈词:这节讲的是键盘输入数字或者小数点的BCD码用来显示,实际项目中,我们经常要知道所输入的BCD码数组到底有效数值是多少,这个该怎么办?欲知详情,请听下回分解----实时同步把键盘输入的BCD码数组转换成数值的液晶屏显示程序。
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一}

我要回帖

更多关于 第三人称单数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信