avr控制按键在1602显示程序
按键后不对!!!!!!不按键显示是对的。
不按键显示51.6910hz
按键A显示setsynth
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 0123
ED DD BD 7D 4567
EB DB BB 7B 89AB
E7 D7 B7 77 CDEF
A按键:进入设置综合器状态下
C按键:光标向左
D按键:保存修改数值并确认退出
E按键:不保存并确认退出
F按键:光标向右
*/
unsigned char synth="51.6910hz";
#pragma used+
void SYNTH_PROC(void) //按键-综合器 的功能函数
{
unsigned char idx,TMP="51.6910";
unsigned char EXIT=0x00;
idx=0;
CLR_SCREEN();
displayROM(0x00,"SET SYNTH");
for(idx=0;idx<9;idx++)
{TMP=synth;}
displayRAM(0x41,TMP);
idx=0;
lcd_pos(0x41+idx);
ICON_CTRL(0x0E);//显示光标
while(EXIT!=0xAA)
{
while(!FLAG); //表示有按键被按下了
FLAG=0;
switch (KEYX) //根据按键的键值执行不同的程序
{
case 0x0D:
{
TMP-=0x30;
TMP-=0x30;
TMP-=0x30;
TMP-=0x30;
TMP='.';
TMP-=0x30;
TMP-=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=KEYX+0x30;
displayB(0x41+idx,TMP);
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;
}
}
};
}
{:sweat:}{:sweat:}{:sweat:}看不懂LZ的问题 想举报 可还是算了 省的烦阿莫 ??????????
有啥看不懂的? while(!FLAG); //表示有按键被按下了
这句是死等 有兴趣的可以详聊:qq:150216708
页:
[1]