#include "public.h" #include "lcd1602.h" #include "reg52.h" #include "intrins.h" #define LED_PORT P2 sbit KEY1=P3^1; sbit KEY2=P3^0; sbit KEY3=P3^2; sbit KEY4=P3^3; #define KEY1_PRESS 1 #define KEY2_PRESS 2 #define KEY3_PRESS 3 #define KEY4_PRESS 4 #define KEY_UNPRESS 0 /******************************************************************************* * º¯ Êý Ãû : main * º¯Êý¹¦ÄÜ : Ö÷º¯Êý * Êä Èë : ÎÞ * Êä ³ö : ÎÞ *******************************************************************************/ u8 key_scan(unsigned char mode) { static unsigned char key=1; if(mode)key=1;//Á¬ÐøɨÃè°´¼ü if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))//ÈÎÒâ°´¼ü°´Ï { delay_10us(1000);//Ïû¶¶ key=0; if(KEY1==0) return KEY1_PRESS; else if(KEY2==0) return KEY2_PRESS; else if(KEY3==0) return KEY3_PRESS; else if(KEY4==0) return KEY4_PRESS; } else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1) //ÎÞ°´¼ü°´Ï { key=1; } return KEY_UNPRESS; void __asm() { unsigned char k=0; unsigned char i=0; lcd1602_init();//LCD1602³õʼ»¯ lcd1602_show_string(0,0,"Hell0 W0rld!");//µÚÒ»ÐÐÏÔʾ LED_PORT=~0x01; delay_10us(50000); while(1) { key=key_scan(0); if(key==KEY1_PRESS)//¼ì²â°´¼üK1ÊÇ·ñ°´Ï LED1=!LED1;//LED1״̬·×ª for(i=0;i<7;i++) //½«led×óÒÆһλ { LED_PORT=_crol_(LED_PORT,1); delay_10us(50000); } for(i=0;i<7;i++) //½«ledÓÒÒÆһλ { LED_PORT=_cror_(LED_PORT,1); delay_10us(50000); } } } 修改代码
时间: 2023-07-13 11:30:46 浏览: 286
intrins.h.rar_INTRINS_Keil C51 intrins.h_c51 _cro_intrins.h xiaz
5星 · 资源好评率100%
根据你提供的代码,有几个问题需要修复:
1. key_scan 函数没有正确结束,导致编译器报错。你需要在 key_scan 函数的最后加上一个返回语句。
2. 在 main 函数中,你定义了一个 __asm 函数,但是这个函数没有任何作用。你需要删除这个函数。
3. 在 main 函数中,LED1 的状态未定义,需要先定义 LED1。你可以使用以下语句定义 LED1:
sbit LED1 = P1^0;
4. 在 main 函数中,LED_PORT 宏定义的后面缺少一个分号,需要加上分号。
修改后的代码如下所示:
```c
#include "public.h"
#include "lcd1602.h"
#include "reg52.h"
#include "intrins.h"
#define LED_PORT P2
sbit LED1 = P1^0;
sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
u8 key_scan(unsigned char mode) {
static unsigned char key=1;
if(mode)key=1;
if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
{
delay_10us(1000);
key=0;
if(KEY1==0)
return KEY1_PRESS;
else if(KEY2==0)
return KEY2_PRESS;
else if(KEY3==0)
return KEY3_PRESS;
else if(KEY4==0)
return KEY4_PRESS;
}
else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)
{
key=1;
}
return KEY_UNPRESS;
}
void main() {
unsigned char k=0;
unsigned char i=0;
lcd1602_init();
lcd1602_show_string(0,0,"Hell0 W0rld!");
LED1 = 0;
delay_10us(50000);
while(1)
{
key=key_scan(0);
if(key==KEY1_PRESS)
LED1=!LED1;
for(i=0;i<7;i++)
{
LED_PORT=_crol_(LED_PORT,1);
delay_10us(50000);
}
for(i=0;i<7;i++)
{
LED_PORT=_cror_(LED_PORT,1);
delay_10us(50000);
}
}
}
```
阅读全文