搜索
bottom↓
回复: 4

avr控制按键在1602显示程序

[复制链接]

出0入0汤圆

发表于 2013-5-4 14:09:44 | 显示全部楼层 |阅读模式
按键后  不对!!!!!!
不按键显示是对的。


不按键显示  51.6910hz
按键A  显示set  synth
                51.6910    并且光标在5下面   
按下数字按键  可以修改各位的数值
按D  可以保存修改
按E  不保存所做的修改
C  光标向左   F光标向右
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.4a Advanced
Automatic Program Generator
?Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 2012-5-1
Author  : NeVaDa
Company : 微软用户
Comments:


Chip type               : ATmega162
Program type            : Application
AVR Core Clock frequency: 11.059200 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega162.h>
#include "LCD1602X.C"

/*
EE DE BE 7E       0  1  2  3  
ED DD BD 7D       4  5  6  7
EB DB BB 7B       8  9  A  B
E7 D7 B7 77       C  D  E  F
A按键:进入设置综合器状态下
C按键:光标向左
D按键:保存修改数值并确认退出
E按键:不保存并确认退出
F按键:光标向右
*/
unsigned char synth[10]="51.6910hz";   
#pragma used+
void SYNTH_PROC(void)        //按键-综合器 的功能函数
    {                       
        unsigned char idx,TMP[10]="51.6910";
        unsigned char EXIT=0x00;
        idx=0;     
        
        CLR_SCREEN();         
        displayROM(0x00,"SET SYNTH");   
        for(idx=0;idx<9;idx++)
            {TMP[idx]=synth[idx];}
        displayRAM(0x41,TMP);   
        idx=0;
        lcd_pos(0x41+idx);
        ICON_CTRL(0x0E);  //显示光标                     
        while(EXIT!=0xAA)   
            {                                               
                while(!FLAG);    //表示有按键被按下了
                FLAG=0;
                switch (KEYX)     //根据按键的键值执行不同的程序
                    {
                        case 0x0D:           
                            {     
                                TMP[6]-=0x30;
                                TMP[5]-=0x30;
                                TMP[4]-=0x30;
                                TMP[3]-=0x30;
                                TMP[2]='.';
                                TMP[1]-=0x30;
                                TMP[0]-=0x30;
                                                                     
                                ICON_CTRL(0x0C);   //隐藏光标
                                EXIT=0xAA;                                                                  
                                break;
                            }
                        case 0x0E:
                            {
                                EXIT=0xAA;                                                                  
                                break;                                 
                            }
                        case 0x0F:            
                            {                                    
                                idx=idx+1;                                                
                                if(idx==3){idx=4;}      
                                if(idx==8){idx=1;}        
                                lcd_pos(0x41+idx);        
                                break;
                            }
                         case 0x0C:            
                            {                                    
                                idx=idx-1;                                                
                                if(idx==3){idx=2;}      
                                
                                if(idx==0){idx=7;}        
                                lcd_pos(0x41+idx);        
                                break;
                            }                                    
                        default:
                            {
                                if(KEYX<10)
                                    {
                                        TMP[idx]=KEYX+0x30;     
                                        displayB(0x41+idx,TMP[idx]);
                                        lcd_pos(0x41+idx);                                       
                                    }
                            }                  
                    }                          
            }  
        CLR_SCREEN();                       
    }
#pragma used-  

main()
{
displayRAM(0x80,synth);
while (1)
      {
         // Place your code here
            
            if(FLAG)
                {
                    FLAG=0;
                    switch(KEYX)
                        {
                        case 0x0A:
                                {
                                    SYNTH_PROC();
                                    break;
                                }                           
                        default:break;
                        }
                }
      };
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-5-4 15:38:12 | 显示全部楼层
看不懂LZ的问题 想举报 可还是算了 省的烦阿莫

出0入0汤圆

 楼主| 发表于 2013-5-4 16:26:14 | 显示全部楼层
??????????
有啥看不懂的?

出50入0汤圆

发表于 2013-5-5 10:17:27 | 显示全部楼层
while(!FLAG);    //表示有按键被按下了
这句是死等

出0入0汤圆

 楼主| 发表于 2013-5-6 09:54:17 | 显示全部楼层
有兴趣的可以详聊:qq:150216708
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表