本帖最后由 jiahz2019 于 2021-12-4 16:38 编辑
见笑了,用这个P0 &= 0x00纯粹是偷懒,这里我是理解的。另外,对汇编也不熟悉呀,新手,前面只是学习了8051的C,还没有独立做过项目。 现在又遇到了一个问题,想启用按键来控制LED灯的闪烁,之前学8051核的时候,可以直接位操作,取反位就可以了。这里不能直接用位操作了,不知如何下手了,下面是我整的一段,仿真不对,灯一直亮。 请再指教一二。 按键接口如上原理图,
#include "cms.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
void delayms(u16 ms)
{
u8 i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void main()
{
P0CL = 0x20; //配置IO状态, P0.2口设置为推挽输出
P1CH = 0x00; //配置IO状态, P1.4口设置为上拉输入
u8 key,temp ;
while(1)
{
temp = P1 ; //这个变量类型定义的好像有误
if(temp & 0x10 == 0) // 判断按键是否按下
{
key++;
if(key >= 2)
{
key = 0;
}
if(key==0)
{
P0 |= 0x04;
delayms(600);
}
if(key==1)
{
P0 &= 0xFB;
delayms(600);
}
}
}
}
|