永发信息网

单片机编程高手进 急!急 想把给按键加高电平起作用 改成加低电瓶起作用

答案:3  悬赏:60  手机版
解决时间 2021-07-21 15:13

#include "reg51.h"

#define uchar unsigned char
#define uint unsigned int

#define ON 0x00
#define OFF 0xFF

#define DM P2
#define DM2 P1


sbit K1 = P0^0;
sbit K2 = P0^1;
sbit K3 = P0^2;
sbit K4 = P0^3;
sbit smgwc1=P3^0;
sbit smgwc2=P3^1;
sbit smgwc3=P3^2;
sbit smgwc4=P3^3;

sbit led1=P3^4;
sbit led2=P3^5;
sbit led3=P3^6;
sbit led4=P3^7;
sbit beep=P0^4;


uchar SMG_DM[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};


uint count=0;
uint smgseq1;
uint smgseq2;
uint smgseq3;
uint smgseq4;

uint k1isdown=0;
uint k2isdown=0;
uint k3isdown=0;
uint k4isdown=0;

//延迟函数
void delay_ms(uchar k) // Fosc=12MHz??
{
uint i,j;

for(i=0;i<k;i++)
for(j=0;j<121;j++);
}

void main(void)
{
TMOD=0x01;
TH0=0x3C; //(50ms)
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
//DM=SMG_DM[smgseq];
smgwc1=1;
smgwc2=1;
smgwc3=1;
smgwc4=1;
//灯初始全灭
led1=0;
led2=0;
led3=0;
led4=0;

//四个数码管送0
smgseq1=0;
smgseq2=0;
smgseq3=0;
smgseq4=0;
DM=SMG_DM[smgseq1];
DM2=SMG_DM[smgseq3];


while(1)
{
if(K1)
{
while(K1);
k1isdown=1;
smgseq1=9;
led1=1;
}

if(k1isdown)
{
//判断的第一次才把smgseq设置为9


//单按下k1的时候送显

smgwc1=1;//smgwc2=0;
DM=SMG_DM[smgseq1]; //数码管计数减少一位
delay_ms(1);//延迟1ms
smgwc1=0;
DM=SMG_DM[smgseq2];
smgwc2=1;
delay_ms(1);//延迟1ms
smgwc2=0;


}

//当第二个开关按下去
if(K2)
{
while(K2);
k2isdown=1;
smgseq2=9;
led2=1;
}
if(k2isdown)
{
//单按下k2的时候送显
smgwc2=1;
DM=SMG_DM[smgseq2]; //数码管计数减少一位
delay_ms(1);//延迟1ms
smgwc2=0;
DM=SMG_DM[smgseq1];
smgwc1=1;
delay_ms(1);//延迟1ms
smgwc1=0;
}


//当第二个开关按下去
if(K3)
{
while(K3);
k3isdown=1;
smgseq3=9;
led3=1;
}
if(k3isdown)
{
//单按下k2的时候送显
smgwc3=1;
DM2=SMG_DM[smgseq3]; //数码管计数减少一位
delay_ms(1);//延迟1ms
smgwc3=0;
DM2=SMG_DM[smgseq4];
smgwc4=1;
delay_ms(1);//延迟1ms
smgwc4=0;
}

//当第二个开关按下去
if(K4)
{
while(K4);
k4isdown=1;
smgseq4=9;
led4=1;
}
if(k4isdown)
{
//单按下k2的时候送显
smgwc4=1;
DM2=SMG_DM[smgseq4]; //数码管计数减少一位
delay_ms(1);//延迟1ms
smgwc4=0;
DM2=SMG_DM[smgseq3];
smgwc3=1;
delay_ms(1);//延迟1ms
smgwc3=0;
}


}
}
//进入中断模式
void t0_isr(void) interrupt 1 //中断1
{
//TF0=0;
TH0=0x3C;
TL0=0xB0;
count++;
if(count>=1200)//假如到了1秒的时间了
{
count=0;

//DM=SMG_DM[smgseq1]; //数码管计数减少一位
if(smgseq1!=0)
{
smgseq1--;
}
//关灯
if(smgseq1==0)
{
led1=0;
}


if(smgseq2!=0)
{
smgseq2--;
}
//关灯
if(smgseq2==0)
{
//k1isdown=0;

led2=0;


}

if(smgseq3!=0)
{
smgseq3--;
}
//关灯
if(smgseq3==0)
{
//k1isdown=0;

led3=0;


//smgseq=10;
}


if(smgseq4!=0)
{
smgseq4--;
}
//关灯
if(smgseq4==0)
{
//k1isdown=0;

led4=0;


//smgseq=10;
}





}
}

最佳答案

之前定义也要改



你之前将按键都定义为低电平了


uint k1isdown=0;
uint k2isdown=0;
uint k3isdown=0;
uint k4isdown=0;



改成高电平

全部回答
谢谢 师傅了 不过这程序现在 按键只能启动不能停止 必须时间到了才停止 我想 能按键停止 不知道师傅能不能帮我

K1和k2等之前加上!

例如if(!k1)

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
DNF太拉戒指.需要多少证物
爱民区牡丹江莱格麻辣烫(中山家园店)这个地址
安装工商银行U盾的时候提示“系统不支持”,
关于人种的问题
关于安全的短句子,有关于安全的好句子
世界上最深的海叫什么海?
男朋友背叛你了,却还说爱着你,如何看待呢?
EY M3256怎么下载手机QQ啊?
远安县宜昌远安县人口和计划生育局在什么地方
饭量加大怎么回事?
怎样开高级QQ?
n70怎么上不去QQ
南阳为迎接2012年全国农运会全民参与,努力提
岳阳县城关镇老干部活动中心在哪里啊,我有事
长江的年龄大还是黄河的年龄大?
推荐资讯
如何自制打窝器
怒伤肝,忧伤脾,还有什么来着?
关于大蛇丸的两个问题
开个五金店需要多少钱,开五金店要多少钱 如何
依兰县哈尔滨晓庆专业美发设计哪位知道具体地
遇到一个问题,无论你怎样说 ,提问的人还是
用窝囊的等级证明爱你的等级,到底是什么意思
星尘小助手的月卡怎么不能冲绑机的绑机的要怎
安图恩孵化场怎么走,DNF安徒恩副本感染孵化场
中学生应不应该注意外貌
下陆区黄石阳阳便利店在哪里啊,我有事要去这
脑筋急转弯 3岁的!!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?