历史上的今天
返回首页

历史上的今天

今天是:2024年11月15日(星期五)

正在发生

2019年11月15日 | avr 12864 矩阵键盘

2019-11-15 来源:51hei



//要做成定时器中断法,节省时间开支

/**************************************

** 说明:线翻转法进行键盘扫描

** 输出:获得高低位的扫描值

** 有键时需要耗时 14ms

**************************************/

unsigned char key_scan(void)

{

unsigned char temp=0,key=0;

        KEY_DDR  = 0xF0;  //高四位输出0,键按下,则对应的值为0

        KEY_PORT = 0x0F;   //低四位输入,内部电阻上拉,没有键按下时为高

        temp = KEY_PIN&0x0F;//与掉高四位

        if(temp==0x0F)

        {

                return 0; // 无按键返回

        }

        else

        {

                Delay_ms(10);

                temp = KEY_PIN&0x0F;   //延时去抖后再检测

                if(temp==0x0F)

                return 0;

                else

                key=temp;

        }

        //翻转

        KEY_DDR  = 0x0F; //低四位输出0,键按下,则对应的值为0

        KEY_PORT = 0xF0;  //高四位输入,内部电阻上拉,没有键按下时为高

        Delay_ms(3);     

        //延时等待稳定


        temp = KEY_PIN&0xF0;//与掉低四位

        if(temp==0xF0)

        {

                return 0; // 无按键返回

        }

        else           

                //这里不再延时再扫描,因为已经确定了不是抖动才会进入本步操作。

        {

                key |= temp;        //高低位的键值进入KEY

        }

        KEY_DDR = 0x00;/*输出复位*/

        KEY_PORT = 0xFF;



        return key;

}

/**************************************

** 说明:获得键盘的值  

** 内部调用函数key_scan

** 输出:实际键值

**************************************/

unsigned char get_key(unsigned char key_get)

{

        switch (key_get)

        {/*将按键码转换成键值*/

                case  Key_0_zero: LCD_WRITE_DAT_CMD(WRDAT,'0');

                        return 0;

                case  Key_1_BLACK: LCD_WRITE_DAT_CMD(WRDAT,'1');

                        return 1;

                case  Key_2_PRINT: LCD_WRITE_DAT_CMD(WRDAT,'2');

                        return 2;

                case  Key_3_REPORT: LCD_WRITE_DAT_CMD(WRDAT,'3');

                        return 3;

                case  Key_4_START: LCD_WRITE_DAT_CMD(WRDAT,'4');

                        return 4;

                case  Key_5_CURVE: LCD_WRITE_DAT_CMD(WRDAT,'5');

                        return 5;

                case  Key_6_TIME: LCD_WRITE_DAT_CMD(WRDAT,'6');

                        return 6;

                case  Key_7_CHECK: LCD_WRITE_DAT_CMD(WRDAT,'7');

                        return 7;

                case  Key_8_SAVE: LCD_WRITE_DAT_CMD(WRDAT,'8');

                        return 8;

                case  Key_9_CORRECTION: LCD_WRITE_DAT_CMD(WRDAT,'9');

                        return 9;

//                case  Key_SET: LCD_WRITE_DAT_CMD(WRDAT,'.');

//                        return '.';

                default : return 0x00;

        }

}



/**************************************

** 说明:获得键盘的值  

** 内部调用函数key_scan

** 输出:实际键值

**************************************/

unsigned char run_key(unsigned char key_get)

{

        switch (key_get)

        {/*将按键码转换成键值*/

                case  Key_0_zero: 

                        LCD_WRITE_DAT_CMD(WRDAT,'0');

                        return 0;

                case  Key_1_BLACK: 

                        LCD_WRITE_DAT_CMD(WRDAT,'1');

                        return 1;

                case  Key_2_PRINT:

                        LCD_WRITE_DAT_CMD(WRDAT,'2');

                        return 2;

                case  Key_3_REPORT:

                        LCD_WRITE_DAT_CMD(WRDAT,'3');

                        return 3;

                case  Key_4_START: 

                        LCD_WRITE_DAT_CMD(WRDAT,'4');

                        return 4;

                case  Key_5_CURVE: //进入标定程序

                        LCD_WRITE_DAT_CMD(WRDAT,'5');

                        return 5;

                case  Key_6_TIME: 

                        LCD_WRITE_DAT_CMD(WRDAT,'6');

                        return 6;

                case  Key_7_CHECK: 

                        LCD_WRITE_DAT_CMD(WRDAT,'7');

                        return 7;

                case  Key_8_SAVE: 

                        LCD_WRITE_DAT_CMD(WRDAT,'8');

                        return 8;

                case  Key_9_CORRECTION: 

                        LCD_WRITE_DAT_CMD(WRDAT,'9');

                        return 9;

                case  Key_OK: 

                        return 'O';

                case  Key_Cannel:

                        return 'C';

                default : return 0xFF;

        }

}

extern unsigned char l_tmpdate[7];

//   0    1    2   3    4    5    6

//  秒分时日月周年09-11-20 12:00:00

void time_keynum_task(unsigned char ddram_addrc)

{

unsigned char key_test=0;

unsigned char i=1;

unsigned char j[8]={0};

        convertChar(X_SHI,Y_SHI,2,FANBAI,1); 

        Read_RTC();


                j[2]=(l_tmpdate[2]/16)*10+l_tmpdate[2]%16;

                j[1]=(l_tmpdate[1]/16)*10+l_tmpdate[1]%16;

                j[0]=(l_tmpdate[0]/16)*10+l_tmpdate[0]%16;

                j[6]=(l_tmpdate[6]/16)*10+l_tmpdate[6]%16;

                j[4]=(l_tmpdate[4]/16)*10+l_tmpdate[4]%16;

                j[3]=(l_tmpdate[3]/16)*10+l_tmpdate[3]%16;

                j[5]=(l_tmpdate[5]/16)*10+l_tmpdate[5]%16;


        while(1)

        {

                Delay_ms(100);

                key_test = key_scan();

                if(key_test !=0)

                {        

                        if(key_test==Key_OK)

推荐阅读

史海拾趣

Helium公司的发展小趣事

Helium公司成立于2013年,由Shawn Fanning、Amir Haleem和Sean Carey共同创立。在创立初期,Helium专注于物联网无线网络技术的研究,但并未迅速获得市场关注。这一时期,电子行业正处于创新与转型阶段,物联网作为新兴领域展现出巨大潜力。Helium团队预见到了物联网的发展趋势,但由于缺乏明确的商业模式,其网络发展并未大规模铺开。然而,这段时期的积累为Helium后续的技术突破和市场拓展奠定了坚实基础。

FREESCALE (NXP)公司的发展小趣事

随着Helium在物联网领域的不断突破和发展,其市场认可度逐渐提升。在2021年,Helium通过Token销售完成了1.11亿美元的融资;次年年初,又以12亿美元估值完成了2亿美元的D轮融资。这些融资的成功不仅为Helium提供了充足的资金支持,也进一步验证了其在物联网和区块链领域的商业价值和发展潜力。同时,Helium还吸引了众多明星机构和投资者的青睐,为其未来的发展奠定了坚实的基础。

Baneasa SA公司的发展小趣事

Baneasa SA公司成立之初,便专注于电子元器件的研发与生产。公司凭借创始团队的技术积累和市场洞察力,成功开发出一款高性能的半导体芯片,迅速在行业内崭露头角。这款芯片以其出色的稳定性和可靠性赢得了市场的广泛认可,为Baneasa SA的发展奠定了坚实的基础。

Fabrimex AG公司的发展小趣事

1982年,Fabrimex AG收购了瑞士领先的实验室电源制造商Erlenbach的K. Witmer Elektronik AG博士。这一收购不仅增强了公司在实验室电源领域的实力,还进一步巩固了其在电子行业中的地位。通过整合双方的技术和资源,Fabrimex AG在实验室电源领域取得了更高的市场份额和更广泛的客户认可。

AEM [ American Electronic Materials]公司的发展小趣事

在追求经济效益的同时,AEM始终关注环境保护和可持续发展。公司积极响应全球环保倡议,采用环保材料和生产工艺,减少生产过程中的废弃物排放和能源消耗。同时,AEM还投入大量资源研发节能环保的电子元器件产品,为客户提供更加绿色、高效的解决方案。

此外,AEM还积极参与社会公益活动,关注社会责任。公司通过捐款、赞助等方式支持教育、文化等事业的发展,为社会的和谐与进步贡献了自己的力量。

Defense Logistics Agency公司的发展小趣事

面对日益复杂的军事需求和快速发展的技术环境,DLA积极推进技术创新和数字化转型。通过引入云计算、大数据、人工智能等先进技术,DLA实现了对全球供应链的实时监控和智能调度,大大提高了后勤保障的效率和准确性。同时,DLA还加强了对新型军事装备的研发和保障能力,确保美军在现代化战争中保持领先地位。

问答坊 | AI 解惑

内核定制时死在这句话 FMD::FMD_OEMIoControl = 0x71c24?

FMD::FMD_OEMIoControl = 0x71c24 用pb向导定制了一个较精简的内核,总是死在这句话上,请问你们遇到过吗?…

查看全部问答>

关于驱动开发环境

驱动开发,调试的时候不想用真实设备,有时甚至没有真实设备 不知道有没有什么模拟硬件设备的软件? (好像VMWare只模拟固定的硬件,比如声卡好像默认就是es1371) 或者问一下大家调试驱动都用什么方法?…

查看全部问答>

问一个 4MHz 51 单片机作电子钟的问题

指令周期是 12/4MHz=3us,电子钟以秒为单位计时。 如何才能做到软件的每天误差小于 1 秒?晶振误差不考虑。 如果定时器以 3ms 中断一次,那么 333.33333 次中断就是一秒, 如果用 333 来近似,那么软件每天大约会快 80 秒。 请问有没有好的办法 ...…

查看全部问答>

请问 在WINCE中如何改变BIOS开机画面?

我在网上搜了很多,但基本都是XP下的方法 请高手指点.…

查看全部问答>

C51 做自学习红外空调遥控器 解码发射问题。

老师叫我这几天做自学习红外遥控器,目前以美的空调遥控器为例。查阅过资料说空调遥控器码和普通电视遥控器 码不同。我用示波器看了下 我的这款美的空调遥控器的码 是  先4MS高电平和4MS低电平引导码,然后是用户码和数据码&n ...…

查看全部问答>

对于照明设计的五点期望

对于照明设计的五点期望期望一:有待提高——照明设计水平 照明设计行业从无到有,从被动的需要到主动的设计经历了较长的发展过程。现在,人们越来越重视照明环境,照明设计师在建筑环境中发挥的作用也越来越大。在不同的建筑环境中,照明设计 ...…

查看全部问答>

高薪聘请电子工程师/技术员 硬件工程师

电子工程师/技术员  硬件工程师 岗位职责: 1.        根据产品需求,完成产品的电路及PCB设计; 2.        完成工程样机的装配、调试与改进; 3.        完成产品各 ...…

查看全部问答>

PWM周期计算

请问各位大侠,在用LM3S配置一个pwm信号时,pwm的信号的周期是确定的,怎么能得到我想要的pwm频率的信号,假如时钟周期为50MHZ…

查看全部问答>

zigbee光伏景观灯

今天在拿到这个芯片的时候迫不及待的拿起我的项目主控ZIGBEE来调通并加入组网实验中来看这个存储效果如何,利用两天天的时间两个个人终于完全整好了,没想到稳定性以及速度都非常乐观。       在zigbee光伏景观灯中,需要用 ...…

查看全部问答>