首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 范文大全
  • 古典文学
  • 职场知识
  • 中国文学
  • 公文书信
  • 外国名著
  • 寓言童话
  • 百家讲坛
  • 散文/诗歌
  • 美文欣赏
  • 礼仪知识
  • 民俗风情
  • 谜语大全
  • 名言警句
  • 印章计数器设计报告

    时间:2021-02-19 18:08:07 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:印章 计数器 报告

    印章计数器设计报告 本文关键词:印章,计数器,报告,设计

    印章计数器设计报告 本文简介:印张计数器设计一.设计任务要求1能够进行6位数码显示,显示当前的印张数;2能够进行印数的预置;3能够进行正/反计数;4能够模拟机械手取出次品;5当计数结束时,可以报警;二.硬件设计总图80C514个LED显示印张计数器运作状态键盘输入端口6个七段数码管显示数据复位监控输入印张计数中断信号输入晶振时钟

    印章计数器设计报告 本文内容:

    印张计数器设计

    一.设计任务要求

    1能够进行6位数码显示,显示当前的印张数;

    2能够进行印数的预置;

    3能够进行正/反计数;

    4能够模拟机械手取出次品;

    5当计数结束时,可以报警;

    二.硬件设计总图

    80C51

    4个LED显示印张计数器运作状态

    键盘输入端口

    6个七段数码管显示数据

    复位监控输入

    印张计数中断信号输入

    晶振时钟输入

    电源LED指示灯

    三.硬件部分分析说明

    1)、显示部分

    实验箱提供了6位8段码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位码是由两片74LS374输出。位码经MC1413或ULN2003倒相驱动后,选择相应显示位。

    在实验箱中8位段码输出地址为0X004H,位码输出地址为0X002H。此处X

    是由KEY/LED

    CS决定,参见地址译码。做键盘和LED实验时,需将KEY/LED

    CS

    接到相应的地址译码上。以便用相应的地址来访问。将KEY/LED

    CS接到CS0上,则段码地址为08004H,位码地址为08002H。

    2)、键盘部分

    1

    预设初始计数值:可通过数字键键入所需计量的印张数,按下“确定(A)”键后开始。

    2

    正向/反向计数:可通过键盘上的正向(B)/反向(C)键切换正向计数或者反向计数。当选择正向计数时,显示屏显示从0开始,每印刷一张,数值加1,直到遇到暂停或者到达预设值时停止计数;当选择反向计数时,显示屏从预设值开始,每印刷一张,数值减1,直到遇到暂停或者到达0时停止计数。

    3次品报告:当按下键盘上次品键(D)时,代表出现次品,此时直流电机停止运转,步进电机缓慢转动一周,代表机械手取出次品,之后直流电机恢复运转。

    4

    报警提示:当计数为0或者到预设值时,停止计数,发出报警,此时L2亮。

    5

    复位键(F)

    四.源程序

    #include

    #define

    LEDLen

    6//用6个八段管

    xdata

    unsigned

    char

    OUTBIT

    _at_

    0x8002;

    //

    位码输出+列扫描地址

    xdata

    unsigned

    char

    OUTSEG

    _at_

    0x8004;

    //

    段码输出

    xdata

    unsigned

    char

    IN

    _at_

    0x8001;

    //

    行扫描地址入口

    xdata

    unsigned

    char

    CS0832

    _at_

    0x9000;//产生电压启动直流电机

    xdata

    unsigned

    char

    control

    _at_

    0xa003;//control=0832---8255内部指令

    xdata

    unsigned

    char

    ctl

    _at_

    0xa000;

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

    code

    unsigned

    char

    LEDMAP[]

    =

    {//数码显示管段码

    0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

    code

    unsigned

    char

    KeyTable[]

    =

    {

    //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

    unsigned

    char

    LEDBuf[LEDLen];

    //

    显示缓冲

    unsigned

    char

    ch;

    //ch=getkey

    int

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

    sbit

    LED1

    =

    P1^0;//正计指示灯

    sbit

    LED2

    =

    P1^1;//反计指示灯

    sbit

    LED3

    =

    P1^2;//结束指示灯

    sbit

    Speaker

    =

    P1^3;

    //喇叭接口

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

    void

    Delay(unsigned

    char

    CNT)

    {

    unsigned

    char

    i;

    while

    (CNT--

    !=0)

    for

    (i=100;

    i

    !=0;

    i--);

    }

    void

    Delay3()

    //喇叭延时

    {

    unsigned

    char

    l;

    for

    (l=0;

    l>=

    1;

    //

    Pos的数据右移一位

    }

    }

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

    unsigned

    char

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

    {

    OUTBIT

    =

    0;

    //

    列设为低电平0

    return

    (~IN

    //

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

    }

    unsigned

    char

    GetKey()//读取键值函数

    {

    unsigned

    char

    Pos;

    unsigned

    char

    i;

    unsigned

    char

    k;

    i

    =

    6;//i代表第几列

    Pos

    =

    0x20;

    //

    得到第几列

    do

    {

    OUTBIT

    =

    ~

    Pos;//

    Pos

    >>=

    1;//向下一列扫描

    k

    =

    ~IN

    }

    while

    ((--i

    !=

    0)

    //

    键值

    =

    x

    4

    +

    if

    (k

    !=

    0)

    {

    i=

    4;

    if

    (k

    else

    if

    (k

    else

    if

    (k

    OUTBIT

    =

    0;

    do

    Delay(10);

    while

    (TestKey());

    //

    等键释放

    return(KeyTable[i]);

    //

    取出键码

    }

    else

    return(0xff);

    }

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

    void

    Stepmotor()

    {

    unsigned

    char

    ctl1[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//A-AB-B-BC-C-CD-D-DA-A

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

    unsigned

    int

    i,j;

    ctl

    =

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

    while(1)

    {

    for(j=0;j0)

    {

    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];

    DisplayLED();

    }

    else

    if(num2==0)

    {

    LED1

    =

    1;

    for(i=0;i=0);

    LED3

    =

    1;

    LED1

    =0;

    LED2

    =0;

    while(1){

    LEDBuf[5]

    =

    LEDMAP[0];

    LEDBuf[4]

    =

    LEDMAP[0];

    LEDBuf[3]

    =

    LEDMAP[0];

    LEDBuf[2]

    =

    LEDMAP[0];

    LEDBuf[1]

    =

    LEDMAP[0];

    LEDBuf[0]

    =

    LEDMAP[0];

    DisplayLED();

    Speaker

    =

    0;

    Delay3();

    Speaker

    =

    1;

    Delay3();

    if

    (TestKey()){ch=GetKey();ch==0x0f;

    then:

    break;}

    }

    }

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

    void

    main()

    {

    unsigned

    char

    i=0xff,j;

    unsigned

    char

    no[6];//每按一个数字键的缓冲

    unsigned

    char

    ch;//

    LEDBuf1

    =

    0;

    control

    =

    0x82;//8255内部指令

    CS0832

    =

    0x80;

    //直流电动机停

    LED1

    =0;

    LED2

    =0;

    LED3

    =0;

    for(j=0;j<6;j++){

    LEDBuf[j]

    =

    0x00;//----

    no[j]=0xff;

    }

    DisplayLED();//显示-----

    while

    (1)

    {

    DisplayLED();

    if

    (TestKey())

    {

    ch=GetKey();

    if(ch<0x0a){

    //输入数据

    i++;

    LEDBuf[i]

    =

    LEDMAP[ch

    no[i]=ch;

    }

    else

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

    num=0;

    for(j=0;j<6;j++){if(no[j]!=0xff)num=num*10+no[j];}

    }

    else

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

    LED1

    =1;

    num1=0;

    zhengji();

    main();

    }

    else

    if(ch==0x0c)

    {//反计(C)

    LED2

    =1;

    num2=num;

    fanji();

    main();

    }

    else

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

    i=0xff;

    LED1=0;

    for(j=0;j<6;j++)

    {

    LEDBuf[j]

    =

    0x00;

    no[j]=0xff;

    }

    DisplayLED();

    }

    }

    }

    五.连线

    直流电机——-8v~+8v

    步进电机A——PA0

    B——PA1

    C——PA2

    D——PA3

    KEY/LED

    CS——CS0

    DA_CS——CS1

    8255

    CS——CS2

    L1——P10

    L2——P12

    L3——P13

    P32——单脉冲

    P13——脉冲输入

    六.程序流程图

    七.设计总结与心得

    单片机的学习比一般编程困难在于,要完成一个单片机系统,不仅要掌握编程技术,更为重要的是要知道如何针对实际应用的需要选择合理的单片机方案和外围器件,并为此为基础,设计硬件电路。所以,单片机是一个软硬结合的产物。对我来说,我可以制作一个产品了。也许我的实力并没有达到更高的级别,但是我会继续努力,争取了解并掌握单片机的设计理念和规则。

    通过此次的微机原理课程,我感受最深的是实践与理论相结合,也是对我们以前学的知识的总结和概括,使得我们在设计的过程中体会到了电子的重要性,体会到了我们所学的知识的用途和方向。、

    在学习的过程中,我发现我还有很多不足之处,我会努力弥补我的不足,继续进步。

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识