求一个按键控制52单片机定时的C程序 10

各位大虾,小人刚学单片机,现想编个程序:52单片机P1.0口的LED有亮10秒/灭60秒、亮10秒/灭10分钟、亮10秒/灭30分钟三种闪烁方式,在P3.3接一个按键可循... 各位大虾,小人刚学单片机,现想编个程序:52单片机P1.0口的LED有亮10秒/灭60秒、亮10秒/灭10分钟、亮10秒/灭30分钟三种闪烁方式,在P3.3接一个按键可循环调用三种状态,同时在P1.1~P1.3三个口用LED分别指示。求各位大虾出援手编个C程序(不要用汇编的哦)。小人实在转不过弯,所以最好能加上注解,以便于我理解。

分不多,各位大虾包容包容,先谢谢了!
致: liushiming82-会者不难,难者不会。
致: 无界自由-这个程序看似还有串口、图片显示等内容,我更看不懂,谈何修改?
展开
 我来答
帐号已注销
2010-07-08 · 超过34用户采纳过TA的回答
知道答主
回答量:97
采纳率:0%
帮助的人:0
展开全部
这里是我用的键盘扫描程序,你可以参考着改一下就可以实现你的功能了,你就只需要再加一个延时子程序以及在相应的按键键码加上相应的动作就行了。
#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

void delayms(void);
uchar kbscan(void);
void Txbyte(unsigned char i);
void Txword(int i);
void TxEOF();
void InitForUART();
void DisPicture(int No);

main()
{ uchar key;
InitForUART();
while(1)
{
key=kbscan();
if(key!=0)
{
switch(key)
{
case 0x21:DisPicture(0x00);
break;
case 0x22:DisPicture(0x01);
break;
case 0x24:DisPicture(0x02);
break;
case 0x11:DisPicture(0x03);
break;
case 0x12:DisPicture(0x04);
break;
case 0x14:P0=0x80;
P2=0xF0;
break;
case 0x09:P0=0xB0;
P2=0xF0;
break;
case 0x0A:P0=0x82;
P2=0xF0;
break;
case 0x0C:P0=0x90;
P2=0xF0;
break;
/*case 0x44:P0=0xF8;
P1=0xf7;
break;
case 0x42:P0=0x83;
P1=0xf7;
break;
case 0x41:P0=0x8E;
P1=0xf7;
break;
case 0x88:P0=0x99;
P1=0xf7;
break;
case 0x84:P0=0x80;
P1=0xf7;
break;
case 0x82:P0=0xC6;
P1=0xf7;
break;
case 0x81:P0=0xc0;
P1=0xf7;
break;*/
default:P2=0xff;
}
}

}
}

uchar kbscan(void)
{
unsigned char sccode,recode;
P1=0x07; //发0扫描,列线输入
if ((P1 & 0x07) != 0x07) //有键按下
{
delayms(); //延时去抖动
if ((P1&0x07)!= 0x07)
{
sccode = 0xF7; //逐行扫描初值
while((sccode&0x01)!=0)
{
P1=sccode;
if((P1&0x07)!=0x07)
{
recode=(P1&0x07)|0xf8;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //无键按下,返回0
}

void delayms(void)
{
unsigned char k,y;
for (k=200; k>0; k--)
for (y=50;y>0;y--);
}

void Txbyte(unsigned char i) //发送字节
{TI=0;
SBUF=i;
while(!TI);
TI=0;
}
void Txword(int i) //发送字
{unsigned char x,y;
x=(i/256);
Txbyte(x);
y=i-256*x;
Txbyte(y);
}
void TxEOF() //帧尾
{Txbyte(0xcc);
Txbyte(0x33);
Txbyte(0xc3);
Txbyte(0x3c);
}
void InitForUART() //串口初始化
{
TMOD=0x21;
SCON=0x50;
TH0=0x4c;
TL0=0x00;
TH1=0xf3;
TL1=0xf3;
EA=1;
ET0=1;
TR0=1;
TR1=1;
}
void DisPicture(int No) //显示图片
{
Txbyte(0xaa);
Txbyte(0x70);
Txbyte(No);
TxEOF();
}
minihoneyer
2010-07-16 · TA获得超过125个赞
知道答主
回答量:206
采纳率:0%
帮助的人:79.7万
展开全部
很简单,几句话而已,不过今天太晚了,明天在写给你吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
平和的饭后散步
2010-07-08 · TA获得超过163个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:94.9万
展开全部
修改都不会,那怎么写啊。

晚上 我来修改试一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liushiming82
2010-07-08 · 超过14用户采纳过TA的回答
知道答主
回答量:164
采纳率:0%
帮助的人:31.7万
展开全部
这太简单了,还是你自己学一点东西吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hahweiHA
2010-07-09
知道答主
回答量:32
采纳率:0%
帮助的人:0
展开全部
凡事靠自己嘴靠得住。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式