eeprom存储键盘值,并用数码管显示出键值对应的十进制数
时间: 2024-06-06 15:09:32 浏览: 5
好的,这是一个关于使用EEPROM存储键盘值并用数码管显示出键值对应的十进制数的问题。首先,需要使用一个微控制器,例如Arduino,来连接数码管和键盘。
接下来,需要编写一个程序来读取键盘上的值,并将其存储在EEPROM中。一旦键盘值被存储,程序将读取EEPROM中的值,并将其转换为十进制数。最后,程序将该数字显示在数码管上。
程序的详细细节可能会有所不同,具体取决于所使用的微控制器和硬件。但是,这是一个基本的框架可以用来实现这个问题的解决方案。
请注意,这个程序是一种典型的嵌入式系统应用,需要具备一定的编程和电子知识,谨慎操作以避免不必要的损害和危险。
相关问题
eeprom存储键盘值,并用数码管显示出键值对应的十进制数,实验代码
可以看一下下面的代码实现:
```c
#include <EEPROM.h>
int digitToSegment[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // 数码管显示的对应关系
int addr = 0; // EEPROM 存储地址
void setup() {
pinMode(A0, INPUT); // 设置 A0 作为输入引脚
for (int i = 2; i < 10; i++) { // 设置 8 个引脚为输出
pinMode(i, OUTPUT);
}
}
void loop() {
int val = analogRead(A0); // 读取 A0 引脚输入的电压值
EEPROM.write(addr, val); // 将数值 val 存储在 EEPROM 内存中
int numToDisp = EEPROM.read(addr); // 从 EEPROM 内存中读取存储的键值
int digits[4] = {0}; // 数码管的显示位
for (int i = 0; i < 4; i++) { // 将数字拆解成四位数字
digits[i] = numToDisp % 10;
numToDisp /= 10;
}
for (int i = 0; i < 4; i++) { // 逐个显示数码管对应数字
digitalWrite(i + 2, HIGH); // 选择对应的数字
digitalWrite(10, digitToSegment[digits[i]]); // 显示对应的数值
delay(1); // 等待一段时间
digitalWrite(i + 2, LOW); // 取消选择的数字
}
addr++; // 存储的地址加 1
if (addr == EEPROM.length()) { // 判断存储的地址是否溢出
addr = 0; // 如果溢出,地址归零
}
}
```
上面的代码可以实现如下功能:将接收到的键盘值通过 EEPROM 存储,每次从 EEPROM 中读取一个键值并转换为对应的四位十进制数码管显示。如果 EEPROM 存储的地址到达了末尾,则地址从头开始循环。
AT89C52单片机EEPROM存储和控制三位数码管显示数字代码
好的,以下是AT89C52单片机EEPROM存储和控制三位数码管显示数字的代码:
```
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1 = P1^0;
sbit D2 = P1^1;
sbit D3 = P1^2;
uchar code num[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 数码管显示0-9的编码
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_eeprom(uchar add,uchar dat)
{
IAP_CONTR = 0x81; // 开启EEPROM写操作
IAP_ADDRH = 0x00; // 设置地址高位为0
IAP_ADDRL = add; // 设置地址低位
IAP_DATA = dat; // 设置写入的数据
IAP_TRIG = 0x46; // 执行EEPROM写操作
IAP_CONTR = 0x00; // 关闭EEPROM写操作
}
uchar read_eeprom(uchar add)
{
uchar dat;
IAP_CONTR = 0x01; // 开启EEPROM读操作
IAP_ADDRH = 0x00; // 设置地址高位为0
IAP_ADDRL = add; // 设置地址低位
IAP_TRIG = 0x46; // 执行EEPROM读操作
dat = IAP_DATA; // 读取EEPROM中的数据
IAP_CONTR = 0x00; // 关闭EEPROM读操作
return dat;
}
void display(uchar d1, uchar d2, uchar d3)
{
D1 = 0; // 选择第一个数码管
P0 = num[d1]; // 显示第一个数码管的数字
delay(5); // 稍微延时一下
D1 = 1; // 取消选中第一个数码管
D2 = 0; // 选择第二个数码管
P0 = num[d2]; // 显示第二个数码管的数字
delay(5); // 稍微延时一下
D2 = 1; // 取消选中第二个数码管
D3 = 0; // 选择第三个数码管
P0 = num[d3]; // 显示第三个数码管的数字
delay(5); // 稍微延时一下
D3 = 1; // 取消选中第三个数码管
}
void main()
{
uchar d1=0,d2=0,d3=0;
uchar dat1,dat2,dat3;
dat1 = read_eeprom(0x00); // 从EEPROM中读取第一个数码管的数字
dat2 = read_eeprom(0x01); // 从EEPROM中读取第二个数码管的数字
dat3 = read_eeprom(0x02); // 从EEPROM中读取第三个数码管的数字
while(1)
{
display(dat1,dat2,dat3); // 显示EEPROM中存储的数字
delay(500); // 延时一下
d3++; // 第三个数码管的数字加1
if(d3 >= 10)
{
d3 = 0;
d2++; // 第二个数码管的数字加1
if(d2 >= 10)
{
d2 = 0;
d1++; // 第一个数码管的数字加1
if(d1 >= 10)
{
d1 = 0;
}
}
}
write_eeprom(0x00,d1); // 将第一个数码管的数字写入EEPROM
write_eeprom(0x01,d2); // 将第二个数码管的数字写入EEPROM
write_eeprom(0x02,d3); // 将第三个数码管的数字写入EEPROM
dat1 = read_eeprom(0x00); // 从EEPROM中读取第一个数码管的数字
dat2 = read_eeprom(0x01); // 从EEPROM中读取第二个数码管的数字
dat3 = read_eeprom(0x02); // 从EEPROM中读取第三个数码管的数字
}
}
```
这段代码可以将三个数码管依次显示0-9,然后循环显示,并将每一个数码管的数字存储在EEPROM中,以便下次开机时可以恢复上次显示的数字。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)