51单片机程序求助

lgfyhx 2009-09-11 02:49:03
本人需要编作以下程序,请各位高手帮忙!
应用AT89C2051单片,(20脚MCS51芯片)P1.0--P1.7组成3*4键盘矩阵输入电路。P3.4为控制输出端.P3.3,P3.7为设置指示灯.P3.2为声讯指示端。具体程式如下:加电复位--输入密码--确定--(是)正常开机(否)反回重输入密码.再次确定.正确开机(开机为P3.4脚输出4秒高电平.)如重置密码正常开机后按设定键.P3.3低电位.灯亮.输入1----8位新密码(随意) 确定.P3.7低电位,灯亮,P3.3恢复高电位.灯灭.再次输入新密码--确定.正确,P3.7恢复高电位,设定完毕.不正确.P3.7闪烁三次.提示重输密码.再次输入新密码.至P3.7恢复高电位,灯灭.设置完成.初始密码为000000
最好采用汇编语言.C51语言也可.
QQ:562680
...全文
149 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Necho 2010-05-11
#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

uchar code table[]={"0123456789-:"};
uchar code table_title[]={"Date: Time:"};

uchar year,month,day,weekday,hour,min,sec;

sbit SLK=P1^1;
sbit IO=P1^2;
sbit RST=P1^3;
sbit lcden=P3^4;
sbit lcdrs=P3^5;

sbit wela=P2^6;
sbit dula=P2^7;

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

}

void write_one_bite(uchar dat)
{
uchar i;
RST = 0;
SLK=0;
RST=1;


for(i=0;i<8;i++)
{
IO=dat&0x01;
SLK=1;
_nop_();
SLK=0;
dat>>=1;
}
/* for(i=0;i<8;i++)
{
IO=dat&0x01;SLK=1;SLK=0;dat>>=1;
}
*/

}

uchar read_one_bite()
{
uchar i,dat;


for(i=0;i<8;i++)
{
dat>>=1;
if(IO)
dat|=0x80;

SLK=1;
_nop_();
SLK=0;
_nop_();


}
SLK=1;
RST=0;
return dat;
/* uchar b=0x00;
for(i=0;i<8;i++)
{
b |= _crol_((uchar)IO,i);
SLK=1;SLK=0;
}
return b; */
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init_lcd()
{
dula=0;
wela=0;
lcden=0;

write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}


void init_1302()
{

write_one_bite(0x8e);
write_one_bite(0x00); RST=0;

write_one_bite(0x90);
write_one_bite(0xa5); RST=0;

write_one_bite(0x80);
write_one_bite(0x49); RST=0;


write_one_bite(0x82);
write_one_bite(0x59); RST=0;

write_one_bite(0x84);
write_one_bite(0x10); RST=0;
write_one_bite(0x86);
write_one_bite(0x01); RST=0;
write_one_bite(0x88);
write_one_bite(0x08); RST=0;
write_one_bite(0x8a);
write_one_bite(0x03); RST=0;
// write_one_bite(0x80);
// write_one_bite(0x09); RST=0;

write_one_bite(0x8c);
write_one_bite(0x07); RST=0;
*/


write_one_bite(0x80);
write_one_bite(0x38);
write_one_bite(0x8e);
write_one_bite(0x80); RST=0;
}

void year_display()
{
uchar temp,i;

write_one_bite(0x8d);
year=read_one_bite();
write_com(0x80);
temp=year&0xf0;
temp=_iror_(temp,4);
for(i=0;i<4;i++)
write_data(table_title[i]);
write_data(table[temp*1]);

write_data(table[(year&0x0f)*1]);
}
void month_display()
{
uchar temp;
write_one_bite(0x89);
month=read_one_bite();
write_com(0x80+0x07);
temp=month&0x10;
write_data(table[(temp>>=4)*1]);
write_data(table[(month&0x0f)*1]);
}
void day_display()
{
uchar temp;
write_one_bite(0x87);
day=read_one_bite();
write_com(0x80+0x0a);
temp=day&0x30;
write_data(table[((temp>>=4)*1)]);
write_data(table[(year&0x0f)*1]);
}
void weekday_display()
{
write_one_bite(0x8d);
weekday=read_one_bite();
write_com(0x80+0x0d);

write_data(table[(weekday&0x07)*1]);

}
void hour_display()
{
uchar temp,i;
write_one_bite(0x85);
hour=read_one_bite();
write_com(0x80+0x40);
for(i=5;i<=9;i++)
write_data(table_title[i]);
temp=hour&0x30;
temp=temp>>4;
write_data(table[temp*10/10]);
delay(2);
write_data(table[(hour&0x0f)*10/10]);
}
void min_display()
{
uchar temp;
write_one_bite(0x83);
min=read_one_bite();
write_com(0x80+0x40+0x08);
temp=min&0x70;
write_data(table[(temp>>=4)*1]);
write_data(table[(min&0x0f)*1]);
}
void sec_display()
{
uchar temp;
write_one_bite(0x81);
sec=read_one_bite();
write_com(0x80+0x40+0x0b);
temp=sec&0x70;
write_data(table[(temp>>=4)*1]);
write_data(table[(sec&0x0f)*1]);
}


void main()
{
init_1302();
init_lcd();


while(1)
{

year_display();
write_data(table[10]);
month_display();
write_data(table[10]);
day_display();
write_data(table[10]);
weekday_display();
hour_display();
write_data(table[11]);
min_display();
write_data(table[11]);
sec_display();

}
}
回复
cgh7512 2009-09-27
电子密码锁
回复
ss229359642 2009-09-26
求助。。
回复
j8727 2009-09-21
没做过单片机,帮不了你
回复
txywqp2010 2009-09-21
呵呵 是啊 同上
回复
ckc 2009-09-17
这么麻烦,别说50分,就是50块也没人帮你做啊
回复
lgfyhx 2009-09-17
是没人会还是来的人太少?还是没人管呢?
回复
lgfyhx 2009-09-13
哪位朋友帮一下,别老说简单,不来实的!写出来在下研究一下也好!谢谢各位!
回复
谁的谁心疼 2009-09-11
耶稣说:回帖得永生
回复
liuzhe_81 2009-09-11
功能比较简单哦,程序应该很好写。
回复
相关推荐
发帖
汇编语言
创建于2007-08-27

2.1w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
申请成为版主
帖子事件
创建了帖子
2009-09-11 02:49
社区公告
暂无公告