编写代码使用void int2_init(void) // 对应外部中断2 { TCON = TCON | 0x10; // 设置INT0为下降沿触发 IE = IE | 0xA0; // 开启INT0中断和总中断 } void int3_init(void) // 对应外部中断3 { TCON = TCON | 0x40; // 设置INT1为下降沿触发 IE = IE | 0xB0; // 开启INT1中断和总中断 }消抖key6和key7void smg_process() { if(key6==0) { delayms(50); if(key6==0) { guang_val=PCF8951_Read(); dis_buff[2]=guang_h%1000/100; dis_buff[1]=guang_h%1000%100/10; dis_buff[0]=guang_h%1000%100%10; } display_xianshi=0; } if(key7==0) { delayms(50); if(key7==0) { guang_val=PCF8951_Read(); dis_buff[2]=guang_l%1000/100; dis_buff[1]=guang_l%1000%100/10; dis_buff[0]=guang_l%1000%100%10; } display_xianshi=1; } }
时间: 2024-03-08 09:51:34 浏览: 52
这段代码可能存在一些问题,因为其中的一些变量和函数并没有定义或说明。但是基于代码中的注释,我可以给出一个简单的示例代码,如下所示:
```c
#include <reg52.h>
sbit key6 = P1 ^ 0; // 定义按键6的引脚
sbit key7 = P1 ^ 1; // 定义按键7的引脚
unsigned char dis_buff[3]; // 数码管显示缓存
unsigned char guang_val; // 光传感器读取的值
unsigned int guang_h = 0x123; // 光传感器高位值
unsigned int guang_l = 0x456; // 光传感器低位值
bit display_xianshi = 0; // 数码管显示标志位
void delayms(unsigned int ms) // 延时函数
{
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 120; j++);
}
void int2_init(void) // 初始化外部中断2
{
TCON = TCON | 0x10; // 设置INT0为下降沿触发
IE = IE | 0xA0; // 开启INT0中断和总中断
}
void int3_init(void) // 初始化外部中断3
{
TCON = TCON | 0x40; // 设置INT1为下降沿触发
IE = IE | 0xB0; // 开启INT1中断和总中断
}
void smg_process() // 消抖处理和数码管显示
{
if (key6 == 0) // 按键6按下
{
delayms(50); // 延时50ms进行消抖处理
if (key6 == 0) // 确认按键6按下
{
guang_val = PCF8951_Read(); // 读取PCF8951的值
dis_buff[2] = guang_h % 1000 / 100; // 将光传感器高位值存储在缓存数组中
dis_buff[1] = guang_h % 1000 % 100 / 10; // 将光传感器高位值存储在缓存数组中
dis_buff[0] = guang_h % 1000 % 100 % 10; // 将光传感器高位值存储在缓存数组中
}
display_xianshi = 0; // 设置数码管显示标志位为0,显示光传感器高位值
}
if (key7 == 0) // 按键7按下
{
delayms(50); // 延时50ms进行消抖处理
if (key7 == 0) // 确认按键7按下
{
guang_val = PCF8951_Read(); // 读取PCF8951的值
dis_buff[2] = guang_l % 1000 / 100; // 将光传感器低位值存储在缓存数组中
dis_buff[1] = guang_l % 1000 % 100 / 10; // 将光传感器低位值存储在缓存数组中
dis_buff[0] = guang_l % 1000 % 100 % 10; // 将光传感器低位值存储在缓存数组中
}
display_xianshi = 1; // 设置数码管显示标志位为1,显示光传感器低位值
}
}
```
需要注意的是,该示例代码中的光传感器高位值和低位值是随便定义的,实际使用时需要根据实际情况进行修改。同时,PCF8951_Read函数也没有定义,需要根据实际使用的光传感器模块进行编写。
阅读全文