印张计数器设计论文Word文档格式.docx

上传人:b****6 文档编号:21119884 上传时间:2023-01-27 格式:DOCX 页数:14 大小:72.27KB
下载 相关 举报
印张计数器设计论文Word文档格式.docx_第1页
第1页 / 共14页
印张计数器设计论文Word文档格式.docx_第2页
第2页 / 共14页
印张计数器设计论文Word文档格式.docx_第3页
第3页 / 共14页
印张计数器设计论文Word文档格式.docx_第4页
第4页 / 共14页
印张计数器设计论文Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

印张计数器设计论文Word文档格式.docx

《印张计数器设计论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《印张计数器设计论文Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

印张计数器设计论文Word文档格式.docx

#defineLEDLen6//用6个八段管

xdataunsignedcharOUTBIT_at_0x8002;

//位码输出+列扫描地址

xdataunsignedcharOUTSEG_at_0x8004;

//段码输出

xdataunsignedcharIN_at_0x8001;

//行扫描地址入口

xdataunsignedcharCS0832_at_0x9000;

//产生电压启动直流电机

xdataunsignedcharcontrol_at_0xa003;

//control=0832---8255内部指令

xdataunsignedcharctl_at_0xa000;

//产生电流启动步进电动机

codeunsignedcharLEDMAP[]={//数码显示管段码

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

codeunsignedcharKeyTable[]={//4*6键盘定义码

0x16,0x15,0x14,0xff,

0x13,0x12,0x11,0x10,

0x0d,0x0c,0x0b,0x0a,

0x0e,0x03,0x06,0x09,

0x0f,0x02,0x05,0x08,

0x00,0x01,0x04,0x07};

//code,单片机中的ROM

unsignedcharLEDBuf[LEDLen];

//显示缓冲

unsignedcharch;

//ch=getkey

intnum,num1,num2,i;

//num(用户输入数)num1(正计)num2(反计)

sbitLED1=P1^0;

//正计指示灯

sbitLED2=P1^1;

//反计指示灯

sbitLED3=P1^2;

//结束指示灯

sbitSpeaker=P1^3;

//喇叭接口

//////////////////////////////////////////////////////////////////////////////延时程序

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;

i!

=0;

i--);

}

voidDelay3()//喇叭延时

unsignedcharl;

for(l=0;

l<

100;

l++);

voiddelay2()////////////////////

unsignedchari,j;

j=30;

do{

for(i=250;

i!

i--);

{

TMOD=0x01;

/*定时器0工作在模式1下(16位计数器)*/

TH0=0xfd;

TL0=0x65;

TR0=1;

/*启动定时器*/

while(TF0==0);

TR0=0;

}

}while(--j);

////////////////////////////////////////////////////////////////////////数码管显示

voidDisplayLED()//数码管显示函数

unsignedcharPos;

Pos=0x20;

//从左边开始显示

for(i=0;

i<

LEDLen;

i++){

OUTBIT=0;

//关所有八段管

OUTSEG=LEDBuf[i];

OUTBIT=Pos;

//显示一位八段管

Delay

(1);

Pos>

>

=1;

//Pos的数据右移一位

/////////////////////////////////////////////////////////////////////////////键盘

unsignedcharTestKey()//键盘扫描函数(本实验属行-列扫描方式)4*6矩阵式键盘

//列设为低电平0

return(~IN&

0x0f);

//读入键状态(高四位不用)得到第几行

unsignedcharGetKey()//读取键值函数

unsignedchark;

i=6;

//i代表第几列

//得到第几列

do{

OUTBIT=~Pos;

//

//向下一列扫描

k=~IN&

0x0f;

}while((--i!

=0)&

&

(k==0));

//键值=列x4+行

if(k!

=0){

i*=4;

if(k&

2)i+=1;

elseif(k&

4)i+=2;

8)i+=3;

doDelay(10);

while(TestKey());

//等键释放

return(KeyTable[i]);

//取出键码

}elsereturn(0xff);

//////////////////////////////////////////////////////////////////////////步进电动机

voidStepmotor()

unsignedcharctl1[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

//A-AB-B-BC-C-CD-D-DA-A

//双八拍,一个周期转60度,8*7.5

unsignedinti,j;

ctl=0;

//步进电动机初始化-无电流

while

(1)

for(j=0;

j<

6;

j++)

for(i=0;

i<

8;

i++)

DisplayLED();

ctl=ctl1[i];

delay2();

DisplayLED();

break;

///////////////////////////////////////////////////////////////////////////中断

voidExtInt0()interrupt0

num1++;

num2--;

////////////////////////////////////////////////////////////////////////////////正计

voidzhengji()

TCON=0x01;

//外部中断0下降沿触发,定时/计数器控制寄存器,INT0=P3.2外部中断0输入

IE=0x81;

//打开外部中断允许位(EX0)及总中断允许位(EA)

CS0832=0xff;

//直流电动机转

while(num1<

=num){

if(num1<

num)

{LEDBuf[5]=LEDMAP[num1%10];

LEDBuf[4]=LEDMAP[num1/10%10];

LEDBuf[3]=LEDMAP[num1/100%10];

LEDBuf[2]=LEDMAP[num1/1000%10];

LEDBuf[1]=LEDMAP[num1/10000%10];

LEDBuf[0]=LEDMAP[num1/1000000%10];

elseif(num1==num)

CS0832=0x80;

//直流电动机停

LED1=1;

LEDBuf[5]=LEDMAP[num%10];

LEDBuf[4]=LEDMAP[(num/10)%10];

LEDBuf[3]=LEDMAP[(num/100)%10];

LEDBuf[2]=LEDMAP[(num/1000)%10];

LEDBuf[1]=LEDMAP[(num/10000)%10];

LEDBuf[0]=LEDMAP[(num/1000000)%10];

if(TestKey())

ch=GetKey();

if(ch==0x0d)//按下次品键

CS0832=0x80;

for(i=0;

10;

Speaker=0;

Delay3();

Speaker=1;

}

Stepmotor();

elseif(ch==0x0f)gotothen;

LED3=1;

LED1=0;

LED2=0;

while

(1){

if(TestKey()){ch=GetKey();

ch==0x0f;

then:

break;

////////////////////////////////////////////////////////////////////////反计

voidfanji()

//外部中断0下降沿触发

if(num2>

0)

LEDBuf[5]=LEDMAP[num2%10];

LEDBuf[4]=LEDMAP[(num2/10)%10];

LEDBuf[3]=LEDMAP[(num2/100)%10];

LEDBuf[2]=LEDMAP[(num2/1000)%10];

LEDBuf[1]=LEDMAP[(num2/10000)%10];

LEDBuf[0]=LEDMAP[(num2/1000000)%10];

elseif(num2==0)

i++)LEDBuf[i]=LEDMAP[0];

if(ch==0x0f)gotothen;

elseif(ch==0x0d)//按下次品键D

{CS0832=0xaf;

//步进电动机转

}while(num2>

=0);

LEDBuf[5]=LEDMAP[0];

LEDBuf[4]=LEDMAP[0];

LEDBuf[3]=LEDMAP[0];

LEDBuf[2]=LEDMAP[0];

LEDBuf[1]=LEDMAP[0];

LEDBuf[0]=LEDMAP[0];

then:

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

voidmain()

unsignedchari=0xff,j;

unsignedcharno[6];

//每按一个数字键的缓冲

unsignedcharch;

//LEDBuf1=0;

control=0x82;

//8255内部指令

LED3=0;

j++){

LEDBuf[j]=0x00;

//----

no[j]=0xff;

//显示-----

while

(1){

if(ch<

0x0a){//输入数据

i++;

LEDBuf[i]=LEDMAP[ch&

0x0f];

no[i]=ch;

elseif(ch==0x0a){//确定(A)

num=0;

j++){if(no[j]!

=0xff)num=num*10+no[j];

elseif(ch==0x0b){//正计(B)

LED1=1;

num1=0;

zhengji();

main();

elseif(ch==0x0c)

{//反计(C)

LED2=1;

num2=num;

fanji();

elseif(ch==0x0f){//复位(F)

i=0xff;

LED1=0;

 

五.连线

1

直流电机

-8v~+8v

2

步进电机A

PA0

3

B

PA1

4

C

PA2

5

D

PA3

6

KEY/LEDCS

CS0

7

DA_CS

CS1

8

8255CS

CS2

9

L1

P1.0

10

L2

P1.1

11

L3

P1.2

12

脉冲输入

P1.3

13

单脉冲

P3.2

六.程序流程图

七.设计总结与心得

此次微机原理课程设计能够完好的完成,我首先感谢我的设计指导老师。

他严谨的治学态度和热忱的工作态度令我十分钦佩,他的知道使我受益匪浅。

通过此次课程设计,让我明白学好专业课的重要性。

虽然我的专业方向是自动化,但是电子和自动化是不分家的。

希望能在以后的学习和工作中,能紧记老师的教导,真正做到学以致用。

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

当前位置:首页 > 表格模板 > 调查报告

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

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