AVR 4*4键盘如何保持当前按下的值!并可以像计算器一样输入一排数

来源:百度知道 编辑:UC知道 时间:2024/06/02 11:02:09
用的AVR M16。写了一个44键盘,值可以读取,但是我想让我按下的键保持,等下一次按键再改变为另一个值
此外,我还想可以在数码管上显示像计算器那样的效果,按一下数字,之前那个数向左移一位,这个程序里还没有,我希望大哥帮我看看,

如果你有更好的程序,可不可以发给我看看。

如果你的能用,真的很感谢,大量分相送~!

/*---------------------------------------------------------------
程序名称:4*4按键扫描程序
目标系统: 基于AVR单片机
应用软件: ICC AVR
注意: 晶振频率:8HMZ,经调试成功运行
循环扫描PD口接入的按键,并使用PB口的LED指示灯指示按键的码值。
并在数码管上显示数。
---------------------------------------------------------------*/
#include <iom16v.H>
#include <macros.h>

#define LED_DDR DDRB
#define LED_PORT PORTB
#define KEY_DDR DDRD
#define KEY_PORT PORTD
#define KEY_PIN PIND

#pragma data:code
const table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e};

#define uchar unsigned char
const uchar setSta_[4]={0xfe,0xfd,0xfb,0xf7};
// setSta={11111110 11111101 11111011 11110111}
const uchar getSta_[4]={0xe0,0xd0,0xb

自己写的计算器,功能有限希望对你有帮助
//===============================================
//芯片: ATMEGAL16L
//时间: 2009.08.04
//晶振频率: 7.3728MHZ
//目的: 按键显示
//===============================================

#include <iom16v.h>
#include <macros.h>

#define uint unsigned int
#define uchar unsigned char

//键盘引脚的定义:
#define KEYSCLK (1 << PA4)
#define KEYDAT (1 << PA5)
#define KEYKBS (1 << PA6)

//液晶显示屏的引脚定义:
#define LCDSCL (1 << PA2)
#define LCDSTD (1 << PA1)
#define LCDCS (1 << PC6)

#define SET_BIT(x,y) ( x |= ( 1 << Y ) ) ;
#define CLR_BIT(x,y) ( x &= ~( 1 << y ) ) ;
#define GET_BIT(x,y) ( x & ( 1 << y ) )

//================================================
//延时子函数
//================================================

void Delayms(uint x)
{