利用CAN总线做一个按键数码管 报告.docx

上传人:b****6 文档编号:6034193 上传时间:2023-01-03 格式:DOCX 页数:13 大小:293.95KB
下载 相关 举报
利用CAN总线做一个按键数码管 报告.docx_第1页
第1页 / 共13页
利用CAN总线做一个按键数码管 报告.docx_第2页
第2页 / 共13页
利用CAN总线做一个按键数码管 报告.docx_第3页
第3页 / 共13页
利用CAN总线做一个按键数码管 报告.docx_第4页
第4页 / 共13页
利用CAN总线做一个按键数码管 报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

利用CAN总线做一个按键数码管 报告.docx

《利用CAN总线做一个按键数码管 报告.docx》由会员分享,可在线阅读,更多相关《利用CAN总线做一个按键数码管 报告.docx(13页珍藏版)》请在冰豆网上搜索。

利用CAN总线做一个按键数码管 报告.docx

利用CAN总线做一个按键数码管报告

信息科学与技术学院

本科三年级

 

现场总线课程

作业报告一

 

专业:

自动化

班级:

自动化一班

姓名:

陈银银

学号:

20092484

2012年4月

利用CAN节点,做个键盘

示意图

仿真之前的图形:

 

仿真后所得为:

源程序:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint//宏定义

//------------------------------------数码管start------------------------//

uchard1=0;

uchard2=0;

uchard3=0;

uchard4=0;

uintp=0;//所要显示的数据

uchardisp[4]={0};

//PE2--SCL13--SCL24--SDA1

sbitSCL1=P1^0;

sbitSCL2=P1^1;

sbitSDA1=P1^2;

//sbitLED=P1^3;

//------------------------------------4X4键盘定义start------------------------//

//键盘用PH口

sbitv1=P2^0;//列

sbitv2=P2^1;

sbitv3=P2^2;

sbitv4=P2^3;

sbith1=P2^4;//行

sbith2=P2^5;

sbith3=P2^6;

sbith4=P2^7;

//------------------------------------4X4键盘定义end------------------------//

uchartemp,num=0;

//ucharcodewei[]={0x01,0x02,0x04,0x08};//四位数码管位选共阳

ucharcodewei[]={~0x01,~0x02,~0x04,~0x08};//四位数码管位选共阴

//ucharcodeduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管CA

ucharcodeduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管CC

//0123456789

voiddelay(uintz)//12M约为1ms

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/*-------------------------------------4X4键盘输入&4位数码管输出start-------------------------------------------*/

voidHC595_in(unsignedcharData)/*--74hc595串行数据输入----*/

{

unsignedchari;

for(i=0;i<8;i++)//循环8次,刚好移完8位

{

SCL1=0;//先将移位寄存器控制引脚置为低

SDA1=Data&0x80;//取数据的最高位

//SDA1=Data;

Data<<=1;//将数据的次高位移到最高位

SCL1=1;//再置为高,产生移位时钟上升沿,上升沿时数据寄存器的数据移位

}

}

voidHC595_out(void)/*---74hc595并行数据输出-----*/

{

SCL2=0;//先将存储寄存器引脚置为低

_nop_();

SCL2=1;//再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。

}

voiddigital_display(void)/*4位数码管显示数据*/

{

uchari;

//uintp=7367;//显示数据p

d1=p/1000;

d2=p/100%10;

d3=p/10%10;

d4=p%10;

disp[0]=duan[d1];

disp[1]=duan[d2];

disp[2]=duan[d3];

disp[3]=duan[d4];

//LED=0;

for(i=0;i<4;i++)//有四位数码管,四位依次扫描

{

HC595_in(wei[i]);//先传位码

//HC595_in(duan[i]);//再传段码

HC595_in(disp[i]);

HC595_out();

delay

(2);//延迟时间2ms以内

}

}

unsignedintkeyboard()/*--keyboard--线反转法--*/

{

staticunsignedinta=0;

unsignedchara1=0,b1=0;

/*行线P2.4-7为输入线,列线P2.0-3为输出线*/

v1=v2=v3=v4=0;

h1=h2=h3=h4=1;

if(P2<0xf0)/*检查行是否有按键按下*/

{

delay(20);

if(P2<0xf0)

{

/*行线为输入线,列线为输出线*/

v1=v2=v3=v4=0;

h1=h2=h3=h4=1;

a1=P2;

/*行线为输出线,列线为输入线*/

h1=h2=h3=h4=0;

v1=v2=v3=v4=1;

b1=P2;

a=a1|b1;/*与0x03相或是为了屏蔽p2.0和p2.1的影响*/

}

}

if(a==0xe7){return0;}//

elseif(a==0xeb){return4;}

elseif(a==0xed){return8;}

elseif(a==0xee){return12;}

elseif(a==0xd7){return1;}//

elseif(a==0xdb){return5;}

elseif(a==0xdd){return9;}

elseif(a==0xde){return13;}

elseif(a==0xb7){return2;}//

elseif(a==0xbb){return6;}

elseif(a==0xbd){return10;}

elseif(a==0xbe){return14;}

elseif(a==0x77){return3;}//

elseif(a==0x7b){return7;}

elseif(a==0x7d){return11;}

elseif(a==0x7e){return15;}

elsereturn8888;//

}

ucharkeyscan()/*----键盘扫描----*/

{

P2=0xfe;

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P2;

switch(temp)

{

case0xee:

num=12;

break;

case0xde:

num=13;

break;

case0xbe:

num=14;

break;

case0x7e:

num=15;

break;

}

while(temp!

=0xf0)

{

temp=P2;

temp=temp&0xf0;

}

}

}

P2=0xfd;

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P2;

switch(temp)

{

case0xed:

num=8;

break;

case0xdd:

num=9;

break;

case0xbd:

num=10;

break;

case0x7d:

num=11;

break;

}

while(temp!

=0xf0)

{

temp=P2;

temp=temp&0xf0;

}

}

}

P2=0xfb;

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P2;

switch(temp)

{

case0xeb:

num=4;

break;

case0xdb:

num=5;

break;

case0xbb:

num=6;

break;

case0x7b:

num=7;

break;

}

while(temp!

=0xf0)

{

temp=P2;

temp=temp&0xf0;

}

}

}

P2=0xf7;

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P2;

switch(temp)

{

case0xe7:

num=0;

break;

case0xd7:

num=1;

break;

case0xb7:

num=2;

break;

case0x77:

num=3;

break;

}

while(temp!

=0xf0)

{

temp=P2;

temp=temp&0xf0;

}

}

}

returnnum;

}

/*-------------------------------------4X4键盘输入&8位数码管输出end-------------------------------------------*/

//---------------------------------------------主函数-------------------------------------------------//

voidmain(void)

{

//unsignedchari;

while

(1)

{

p=keyscan();

//p=6789;

digital_display();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1