文档库 最新最全的文档下载
当前位置:文档库 › 绕线机计数器程序

绕线机计数器程序

绕线机计数器程序
绕线机计数器程序

声明:本程序已经调好并已投入实际生产中。此公开的目的是给单片机初学者的一个简单的实例,供学习用。本人的宗旨是:“人人为我,我为人人”。大家共同分亨学习及改证,如转贴请注明出处。请勿用于商业途径!

2006-2-10整理

以下程序请”大虾”不吝指正!!!!

;***********************************;

; 绕线机计数器程序;

;CPU : 89C2051 版本: V2.7 ;

;可预置数--电机车间专用;

;创建:2005-02-01 修改于:2005.09.29 ;

;作者:孙世林;

;

; E-mail:sunlin137@https://www.wendangku.net/doc/3c7021433.html, ;

;***********************************;

;

;****************;

; 伪定义;

;****************;

LED0 EQU 3AH; 存放显存的小数

LED1 EQU 3BH; 存放个位数

LED2 EQU 3CH; 存放十位数

LED3 EQU 3DH; 存放百位数

LED4 EQU 3FH; 存放千位数

SLOW0 EQU 40H; 存放减速预置数小数

SLOW1 EQU 41H; 存放减速预置数个位

SLOW2 EQU 42H; 存放减速预置数十位

SLOW3 EQU 43H; 存放减速预置数百位

SLOW4 EQU 44H; 存放减速预置数千位

TOEND0 EQU 45H; 存放预置数小数位

TOEND1 EQU 46H; 存放预置数个位

TOEND2 EQU 47H; 存放预置数十位

TOEND3 EQU 48H; 存放预置数百位

TOEND4 EQU 49H; 存放预置数千位

L1BIT1 EQU 4AH; 存放相应键位中的预置数L1

L1BIT2 EQU 4BH;

L1BIT3 EQU 4CH;

L1BIT4 EQU 4DH;

L2BIT1 EQU 4EH; 存放相应键位中的预置数L2 L2BIT2 EQU 4FH;

L2BIT3 EQU 50H;

L2BIT4 EQU 51H;

L3BIT1 EQU 52H; 存放相应键位中的预置数L3 L3BIT2 EQU 53H;

L3BIT3 EQU 54H;

L3BIT4 EQU 55H;

L4BIT1 EQU 56H; 存放相应键位中的预置数L4 L4BIT2 EQU 57H;

L4BIT3 EQU 58H;

L4BIT4 EQU 59H;

MOVD EQU 5EH;

MOVE EQU 5FH;

MOVDA T4 EQU 60H; 存放寄存数L0-L4 MOVDA T3 EQU 61H;

MOVDA T2 EQU 62H;

MOVDA T1 EQU 63H;

MOVDA T0 EQU 64H;

RUNOVER EQU 65H;

L1ORL2 EQU 5CH;

L1ORL EQU 5DH;

;************;

; 中断入口;

;************;

ORG 0000H ;程序执行开始地址

LJMP START ;跳至START执行

ORG 0003H ;外中断0中断入口地址

LJMP INTEXT0 ;

ORG 000BH ;定时器T0中断入口地址

RETI ;中断返回

ORG 0013H ;外中断1中断入口地址

LJMP INTEXT1 ;

ORG 001BH ;定时器T1中断入口地址

RETI ;中断返回

ORG 0023H ;串行口中断入口地址

RETI ;中断返回

ORG 002BH ;定时器T2中断入口地址

RETI ;中断返回

;************;

; 初始化程序;

;************;

START: LJMP LODLED; 进入开机显示信息程序

MOV TMOD,#90H;

MOV SP,#70H;

SETB PX0;

START0: MOV LED4,#0DH; 清零时显示"CLR" 并为不限制计数范围、清除循环计数标志

MOV LED3,#0FH;C

MOV LED2,#0AH;L

MOV LED1,#010H;R

MOV LED0,#0DH;

START1: ACALL DISPLAY; 等待键释放

JNB P1.7, START1

CLEAR: MOV TOEND0,#0AH; 初始化预置数值及减速数值

MOV TOEND1,#0AH

MOV TOEND2,#0AH

MOV TOEND3,#0AH

MOV TOEND4,#0AH

MOV SLOW1,#0AH

MOV SLOW2,#0AH

MOV SLOW3,#0AH

MOV SLOW4,#0AH

MOV L1ORL2,#00H; 不循环计数标记

MOV L1BIT1,#0H;*L1-10 载入初始默认数

MOV L1BIT2,#1H;

MOV L1BIT3,#0H;

MOV L1BIT4,#0H;

MOV L2BIT1,#0H;*L2-20

MOV L2BIT2,#2H;

MOV L2BIT3,#0H;

MOV L2BIT4,#0H;

MOV L3BIT1,#5H;*L3-15

MOV L3BIT2,#1H;

MOV L3BIT3,#0H;

MOV L3BIT4,#0H;

MOV L4BIT1,#0H;*L4-30

MOV L4BIT2,#3H;

MOV L4BIT3,#0H;

MOV L4BIT4,#0H;

CLEARP: ACALL CLRALL; 调用清零程序

ACALL CLRMOV;

LJMP MAIN; 跳到主程序开始计数CLRALL: MOV A,#00H; 将LED0至LED4计数显存置0 MOV LED0,A

MOV LED1,A

MOV LED2,A

MOV LED3,A

MOV LED4,A

CLR C;

MOV P3,#0FFH

MOV P1,#0FFH

RET

CLRMOV: MOV A,#00H; 暂存器置零

MOV MOVDA T4,A

MOV MOVDA T3,A

MOV MOVDA T2,A

MOV MOVDA T1,A

MOV MOVDA T0,A

RET

;************************;

; 快速预置数程序L1~L4 ;

;************************;

CLEAR1: MOV TOEND0,#0H; 载入预置数到寄存器L1 MOV TOEND1,L1BIT1

MOV TOEND2,L1BIT2

MOV TOEND3,L1BIT3

MOV TOEND4,L1BIT4

MOV R1,L1BIT1; 处理减速数值

MOV R2,L1BIT2;

MOV R3,L1BIT3;

MOV R4,L1BIT4;

MOV L1ORL,#00H; 建立循环标记

AJMP CLEPOG;

CLEAR2: MOV TOEND0,#0H; 载入预置数到寄存器L2 MOV TOEND1,L2BIT1

MOV TOEND2,L2BIT2

MOV TOEND3,L2BIT3

MOV TOEND4,L2BIT4

MOV R1,L2BIT1; 处理减速数值

MOV R2,L2BIT2;

MOV R3,L2BIT3;

MOV R4,L2BIT4; 建立循环标记

MOV L1ORL,#05H;

AJMP CLEPOG;

CLEAR3: MOV TOEND0,#0H; 载入预置数到寄存器L3

MOV TOEND1,L3BIT1

MOV TOEND2,L3BIT2

MOV TOEND3,L3BIT3

MOV TOEND4,L3BIT4

MOV R1,L3BIT1; 处理减速数值

MOV R2,L3BIT2;

MOV R3,L3BIT3;

MOV R4,L3BIT4;

AJMP CLEPOG;

CLEAR4: MOV TOEND0,#0H; 载入预置数到寄存器L4

MOV TOEND1,L4BIT1

MOV TOEND2,L4BIT2

MOV TOEND3,L4BIT3

MOV TOEND4,L4BIT4

MOV R1,L4BIT1; 处理减速数值

MOV R2,L4BIT2;

MOV R3,L4BIT3;

MOV R4,L4BIT4;

CLEPOG: DEC R1; 减速数值是终值的前一圈进行

CLR C; 清进位标致

CJNE R1,#0FFH,CLEOUT;

MOV R1,#09H;

DEC R2;

CLR C; 清进位标致

CJNE R2,#0FFH,CLEOUT;

MOV R2,#09H;

DEC R3

CLR C; 清进位标致

CJNE R3,#0FFH,CLEOUT;

MOV R3,#09H;

DEC R4

CLR C; 清进位标致

CJNE R4,#0FFH,CLEOUT;

MOV R4,#09H;

CLEOUT: MOV SLOW1,R1; 载入减速数到寄存器

MOV SLOW2,R2;

MOV SLOW3,R3;

MOV SLOW4,R4;

LJMP CLEARP; 跳到初始化程序

CLEAREX:MOV TOEND0,#0AH; 解除锁定电机控制,且不清零继续计数

MOV TOEND1,#0AH

MOV TOEND2,#0AH

MOV TOEND3,#0AH

MOV TOEND4,#0AH

ACALL CLEARPX;

AJMP MAIN

CLEARPX:MOV SLOW1,#0AH; 不减速时载入的数

MOV SLOW2,#0AH

MOV SLOW3,#0AH

MOV SLOW4,#0AH

MOV P3,#0FFH

MOV P1,#0FFH

RET

;**************************************;

; 主程序;

;**************************************;

MAIN: MOV A,SLOW4; 判断是否到减速的数值(千位)MOV MOVD,LED4

CJNE A,MOVD,LOOP0

MOV A,SLOW3; 判断是否到减速的数值(百位)

MOV MOVD,LED3

CJNE A,MOVD,LOOP0

MOV A,SLOW2; ...................十位

MOV MOVD,LED2

CJNE A,MOVD,LOOP0

MOV A,SLOW1; ...................个位

MOV MOVD,LED1

CJNE A,MOVD,LOOP0

MOV A,LED0; 减速(使P1.7口电压下降约0.6V)

MOVC A,@A+DPTR; 递增减速

MOV P1,A

CLR P3.5; 高位高亮显示发出提示,并断开慢起动电路

ACALL D1MS

SETB P1.7

LOOP0: MOV A,TOEND4; 判断是否到预置数了(千位)

MOV MOVD,LED4

CJNE A,MOVD,LOOP

MOV A,TOEND3; ................百位

MOV MOVD,LED3

CJNE A,MOVD,LOOP

MOV A,TOEND2; ................十位

MOV MOVD,LED2

CJNE A,MOVD,LOOP

MOV A,TOEND1; ................个位

MOV MOVD,LED1

CJNE A,MOVD,LOOP

MOV A,TOEND0; ................小数位

MOV MOVD,LED0

CJNE A,MOVD,LOOP

CLR P1.7; 控制电机停车

LCALL DLS3; 延时约0.5秒

MOV A,#05H;

CJNE A,L1ORL2,LOOP1; 如标记位不是07则跳至LOOP1

AJMP ACTION_X; 到预置数时,跳到循环L1-L2计数LOOP1: AJMP ACTION; 跳到停机等待按键处理程序

LOOP: ACALL DISPLAY; 调用显示程序

MOV P1,#0FFH; 置P1口为输入状态

MOV P3,#0FFH; 置P3口为输入状态

JNB P1.0,NUMNOW; 显示当前的预置数并将标志位置数

JNB P1.1,NOTSLOW; 不减速

JNB P1.7,ALLCLR; 如清零键按下跳至清零序清除所有已设定数

JNB P3.7,SELSA VE0; 如设置键按下跳到到点程序选数

JNB P1.6,LED_L1; 显示相应键位值是多少

JNB P1.2,LED_L2;

JNB P1.5,LED_L3;

JNB P1.3,LED_L4;

JNB P1.4,LED_L5;

SELOD: SETB IT0;

SETB EX0;

SETB IT1;

SETB EX1;

SETB EA; 开总中断

AJMP MAIN; 返回主程序重复

LED_L1: AJMP LOOKL1; 跳至显示当前键位的预置数是多少L1 LED_L2: AJMP LOOKL2; 跳至显示当前键位的预置数是多少L2 LED_L3: AJMP LOOKL3; 跳至显示当前键位的预置数是多少L3 LED_L4: AJMP LOOKL4; 跳至显示当前键位的预置数是多少L4 LED_L5: AJMP LOOKL5;

ALLCLR: LJMP START0;

NUMNOW: AJMP LOOKNOW

NOTSLOW: ACALL LOOKLX;

NOTSLOW1:ACALL DISPLAY0

LCALL DLS1

SETB P1.1

JNB P1.1,NOTSLOW1

LCALL CLEARPX; 调用不减速程序

MOV SLOW4,#0FH

MOV LED4,#0EH; 高位显示PXXXX

AJMP MAIN

SELSA VE0:ACALL LOOKLX; 将当前数寄存在指定单元

SELSA VE: JB P3.7,SELOD5

LCALL DLS1

JNB P3.7,SELOD2; 若按下大于1秒则跳

LCALL SELOD3

SELOD1: AJMP SELOD5

SELOD2: ACALL LOOKLX;

MOV LED4,#013H; 显示“-----”

MOV LED3,#013H;

MOV LED2,#013H;

MOV LED1,#013H;

MOV LED0,#013H;

SELOD21: ACALL DISPLAY0

SETB P3.7

JNB P3.7,SELOD21

LJMP SELNUM; 跳到设置预置数状态

SELOD3: MOV A,LED2

MOV MOVD,#011H; 如为T则返回避免在显示SET时出错

CJNE A,MOVD,SELOD5

AJMP SELOD

SELOD5: CLR P1.7

CLR EA; 关总中断

MOV LED4,#0DH; 设置键按下时显示"SET"

MOV LED3,#05H

MOV LED2,#011H

MOV LED1,#012H

MOV LED0,#0DH

ACALL DISPLAY0

SETB P3.7

JNB P3.7,SELOD5;

ACTION: CLR P1.7

ACALL DISPLAY0

MOV P1,#0FFH; 置P1.0至P1.6为输入状态

CLR P1.7

SETB P3.7

JNB P1.0,KBSET3; 执行超程计数

JNB P1.1,KBSET0;

RETF: JNB P1.2,KBOUT22; L2 只有L1至L4与SET\SEL键输入有效JNB P1.3,KBOUT40; L4

JNB P1.4,KBOUT0; L--------rel--------NEXT

JNB P1.5,KBOUT3; L3

JNB P1.6,KBOUT11; L1

JNB P3.7,KBSET1; SET

AJMP ACTION;

KBSET0: AJMP ACTION;

KBSET1: MOV A,LED2

MOV MOVD,#011H; 如为E则返回

CJNE A,MOVD,KBSET12;

AJMP ACTION;

KBSET12: ACALL DISPLAY0

LCALL DLS1

JNB P3.7,KBSET11; 若按下大于1秒则跳

AJMP ACTION;

KBSET11: AJMP SELSA VE;

KBSET3: MOV A,LED2

MOV MOVD,#011H; 看是否为SET

CJNE A,MOVD,KBOUT60; 如不为SET就执行超程计数

AJMP RETF; 是SET则返回

KBOUT60: LJMP KBOUT6;

KBOUT0: AJMP KBOUT5;

KBOUT40: AJMP KBOUT4;

KBOUT11: MOV A,#05H;

CJNE A,L1ORL2,KBOUT1; 如标记位不是05则跳

MOV RUNOVER,#08H; 建立循环次数8次

KBOUT1: MOV LED4,#0AH; 当K1按下时显示“L 1”

MOV LED3,#0DH

MOV LED2,#01H

MOV LED1,#0DH

MOV LED0,#0DH

ACALL DISPLAY0

SETB P1.6

JNB P1.6,KBOUT1; 延时消抖

ACALL DISPLAY0

LCALL DLS3

LJMP CLEAR1; 如松开键时跳至CLEAR1置数程序KBOUT22: MOV A,#05H;

CJNE A,L1ORL2,KBOUT2; 如标记位不是05则跳,(不循环计数)

MOV RUNOVER,#06H; 建立循环次数6次

KBOUT2: MOV LED4,#0AH; .L 2

MOV LED3,#0DH; .

MOV LED2,#02H; .

MOV LED1,#0DH

MOV LED0,#0DH

ACALL DISPLAY0

SETB P1.2

JNB P1.2,KBOUT2

ACALL DISPLAY0

LCALL DLS3

LJMP CLEAR2

KBOUT3: MOV LED4,#0AH; L 3

MOV LED3,#0DH

MOV LED2,#03H

MOV LED1,#0DH

MOV LED0,#0DH

ACALL DISPLAY0

SETB P1.5

JNB P1.5,KBOUT3

ACALL DISPLAY0

LCALL DLS3

LJMP CLEAR3

KBOUT4: MOV LED4,#0AH; L 4

MOV LED3,#0DH

MOV LED2,#04H

MOV LED1,#0DH

MOV LED0,#0DH

ACALL DISPLAY0

SETB P1.3

JNB P1.3,KBOUT4

ACALL DISPLAY0

LCALL DLS3

LJMP CLEAR4

KBOUT5: ACALL DISPLAY0

SETB P1.4

JNB P1.4,KBOUT5

LJMP LOOKL5

KBOUT6: MOV LED4,#011H; E.... 解除电机锁定并继续计数,同时高位用E显示ACALL DISPLAY0

LCALL DL05S

SETB P1.0

JNB P1.0,KBOUT6

LJMP CLEAREX

ACTION_X:ACALL DISPLAY0; 循环数判别

CLR C; 清进位标致

LCALL DLS3; 延时约1秒

LCALL DLS3

DJNZ RUNOVER,NEXT; 是否计完8/6次?不是则再继续循环

LJMP ACTION; 跳到停机状态,等待按键处理NEXT: MOV A,#05H;

CJNE A,L1ORL,GOL2; 如是L1则转L2、如是L2则转L1

LJMP KBOUT1;

GOL2: LJMP KBOUT2;

;***************************;

; 显示当前键位中的预置数;

;***************************;

LOOKL1: ACALL LOOKLX;

MOV LED4,L1BIT4;

MOV LED3,L1BIT3;

MOV LED2,L1BIT2;

MOV LED1,L1BIT1;

AJMP LOOKALL

LOOKL2: ACALL LOOKLX;

MOV LED4,L2BIT4;

MOV LED3,L2BIT3;

MOV LED2,L2BIT2;

MOV LED1,L2BIT1;

AJMP LOOKALL

LOOKL3: ACALL LOOKLX;

MOV LED4,L3BIT4;

MOV LED3,L3BIT3;

MOV LED2,L3BIT2;

MOV LED1,L3BIT1;

AJMP LOOKALL

LOOKL4: ACALL LOOKLX;

MOV LED4,L4BIT4;

MOV LED3,L4BIT3;

MOV LED2,L4BIT2;

MOV LED1,L4BIT1;

AJMP LOOKALL

LOOKL5: ACALL LOOKLX;

ACALL DISPLAY0

SETB P1.4

JNB P1.4,LOOKL5

MOV A,LED2

MOV MOVD,#011H; 如为E则返回

CJNE A,MOVD,LOOKL51;

AJMP ACTION;

LOOKL51: MOV L1ORL2,#05H; -REL-

MOV LED4,#013H;

MOV LED3,#010H;

MOV LED2,#011H;

MOV LED1,#0AH;

MOV LED0,#013H;

AJMP LOOKA1;

LOOKNOW: ACALL LOOKLX;

MOV LED4,TOEND4;

MOV LED3,TOEND3;

MOV LED2,TOEND2;

MOV LED1,TOEND1;

LOOKALL: MOV LED0,#010H;

LOOKA1: ACALL DISPLAY0;

LCALL DLS2

LCALL DLS3

ACALL LOOKLB;

AJMP MAIN;

LOOKLX: MOV MOVDA T4,LED4; 送数入寄存器MOV MOVDA T3,LED3;

MOV MOVDA T2,LED2;

MOV MOVDA T1,LED1;

MOV MOVDA T0,LED0;

CLR P1.7; 置电机停止工作

RET

LOOKLB: MOV LED4,MOVDA T4;

MOV LED3,MOVDA T3;

MOV LED2,MOVDA T2;

MOV LED1,MOVDA T1;

MOV LED0,MOVDA T0;

RET

;*****************;

; 设置预置数程序;

;*****************;

SELNUM: MOV LED4,#013H; 显示“-----”

MOV LED3,#013H;

MOV LED2,#013H;

MOV LED1,#013H;

MOV LED0,#013H;

ACALL DISPLAY

LCALL DLS1

ACALL LEDOFF; 调用灭灯程序

MOV P1,#0FFH;

MOV P3,#0FFH

JNB P3.2,SELNUM1

JNB P1.0,SELNUM1

JNB P3.7,GOMAIN

AJMP SELNUM

SELNUM1: ACALL CLRALL; 调用清零程序

SELNUM2: ACALL DISPLAY

MOV P1,#0FFH;

JNB P1.6,SA VEL1;

JNB P1.2,SA VEL2;

JNB P1.5,SA VEL3;

JNB P1.3,SA VEL4;

JNB P1.4,SA VEL5;

JNB P1.0,ADDONE0;

JNB P1.1,DECONE0;

JNB P3.7,GOMAIN;

AJMP SELNUM2;

ADDONE0: AJMP ADDONE;

DECONE0: AJMP DECONE;

GOMAIN: ACALL DISPLAY;

JNB P3.7,GOMAIN;

LCALL CLRALL

LCALL LOOKLB

ACALL DISPLAY

LJMP MAIN

SA VEL1: LCALL DLS1

JB P1.6,SELNUM2; L1

MOV L1BIT1,LED1; 将显示的数存到相应键位的寄存器中

MOV L1BIT2,LED2; 小数不保存

MOV L1BIT3,LED3;

MOV L1BIT4,LED4;

LJMP KBOUT1

SA VEL2: LCALL DLS1

JB P1.2,SELNUM2; L2

MOV L2BIT1,LED1;

MOV L2BIT2,LED2;

MOV L2BIT3,LED3;

MOV L2BIT4,LED4;

LJMP KBOUT2

SA VEL3: LCALL DLS1

JB P1.5,SELNUM2; L3

MOV L3BIT1,LED1;

MOV L3BIT2,LED2;

LJMP KBOUT3

SA VEL4: LCALL DLS1

JB P1.3,SELNUM2; L4

MOV L4BIT1,LED1;

MOV L4BIT2,LED2;

MOV L4BIT3,LED3;

MOV L4BIT4,LED4;

LJMP KBOUT4

SA VEL5: LCALL DLS1

JB P1.4,SELNUM21

LJMP LOOKA1;

ADDONE: ACALL ADD1; 按键加1

CLR P1.0

JB P1.0,ADDONE1;

LCALL DLS1;

SETB P1.0

JNB P1.0,ADDONE2; 若按下大于1秒则跳到快速加1程序SELNUM21:AJMP SELNUM2;

ADDONE1: LCALL DISPLAY

LCALL DL1S

LCALL DL1S

AJMP ADDONE

ADDONE2: ACALL ADD1; 按键快速加1程序

ACALL DISPLAY

LCALL DL1S

LCALL DL1S

LCALL DL1S

SETB P1.0

JNB P1.0,ADDONE2

AJMP SELNUM2

DECONE: ACALL DEC1; 按键减1

CLR P1.1

JB P1.1,DECONE1;

LCALL DLS1;

SETB P1.1

JNB P1.1,DECONE2; 若按下大于1秒则跳

AJMP SELNUM2;

DECONE1: LCALL DISPLAY

LCALL DL1S

LCALL DL1S

AJMP DECONE

DECONE2: ACALL DEC1; 按键快速减1

ACALL DISPLAY

LCALL DL1S

LCALL DL1S

LCALL DL1S

SETB P1.1

JNB P1.1,DECONE2;

AJMP SELNUM2; 退回

;************;

; 中断0 加1程序;

;************;

INTEXT0: PUSH ACC; 进栈

PUSH PSW;

INC LED0; 寄存单元LED0加1

MOV A,LED0; 小数加1

CJNE A,#0AH,INT0OUT; LED0数是否在10内0-9

MOV LED0,#00H; 如到了则将LED0置0

ACALL ADD1; 调用加1程序整数部分INT0OUT: POP PSW; 出栈

POP ACC

RETI; 中断返回

;************;

;中断1 减1程序;

;************;

INTEXT1: PUSH ACC; 进栈

PUSH PSW

DEC LED0; LED0减1

MOV A,LED0 ;

CLR C; 清进位标致

CJNE A,#0FFH,INT1OUT; 判断LED0是不在0-9中

MOV LED0,#09H; 不是将LED0置9

ACALL DEC1; 调用减1程序

INT1OUT: POP PSW

POP ACC

RETI; 中断返回

;*************;

; 加1程序;

;*************;

ADD1: INC LED1; LED1加1

MOV A,LED1

CJNE A,#0AH,ADD1OUT; 显存单元在0-9

MOV LED1,#00H; 如是10时则置零

INC LED2; LED2加1

MOV A,LED2

CJNE A,#0AH,ADD1OUT; .

MOV LED2,#00H

INC LED3

MOV A,LED3

CJNE A,#0AH,ADD1OUT; .

MOV LED3,#00H

INC LED4

MOV A,LED4

CJNE A,#0AH,ADD1OUT

MOV LED4,#00H

ADD1OUT: RET

;**************;

; 减1程序;

;**************;

DEC1: DEC LED1; LED1减1

MOV A,LED1

CLR C; 清进位标志

CJNE A,#0FFH,DEC1OUT; .

MOV LED1,#09H; .

DEC LED2;

MOV A,LED2

CLR C;

CJNE A,#0FFH,DEC1OUT

MOV LED2,#09H

DEC LED3

MOV A,LED3

CLR C;

CJNE A,#0FFH,DEC1OUT

MOV LED3,#09H

DEC LED4

MOV A,LED4

CLR C;

CJNE A,#0FFH,DEC1OUT

MOV LED4,#09H

DEC1OUT: RET

;************;

; 显示程序;

;************;

DISPLAY: MOV DPTR,#NUMTAB; 指针指向数据字符码

MOV A,LED0

MOVC A,@A+DPTR; 查表

MOV P1,A

SETB P1.7

CLR P3.0; 选中小数位显示

ACALL D1MS

SETB P3.0

MOV A,LED1

MOVC A,@A+DPTR

MOV P1,A

SETB P1.7

CLR P3.1; 选中个位数显示

ACALL D1MS

SETB P3.1

MOV A,LED2

MOVC A,@A+DPTR

MOV P1,A

SETB P1.7

CLR P3.4; 选中十位数显示

ACALL D1MS

SETB P3.4

MOV A,LED3

MOVC A,@A+DPTR

MOV P1,A

SETB P1.7

CLR P3.7; 选中百位数显示

ACALL D1MS

SETB P3.7

MOV A,LED4

MOVC A,@A+DPTR

MOV P1,A

SETB P1.7

CLR P3.5; 选中千位数显示

ACALL D1MS

SETB P3.5

RET

;**************************************************************************;

; 显示程序2 因电机控制引脚和显示输出引脚共用,所以在到预置数时再处理一次; ;**************************************************************************; DISPLAY0: MOV DPTR,#NUMTAB

MOV A,LED0

MOVC A,@A+DPTR

MOV P1,A

CLR P1.7; 保持锁定电机

CLR P3.0

ACALL D1MS

SETB P3.0

MOV A,LED1

MOVC A,@A+DPTR

MOV P1,A

CLR P1.7

CLR P3.1

ACALL D1MS

SETB P3.1

MOV A,LED2

MOVC A,@A+DPTR

MOV P1,A

CLR P1.7

CLR P3.4

ACALL D1MS

SETB P3.4

MOV A,LED3

MOVC A,@A+DPTR

MOV P1,A

CLR P1.7

CLR P3.7

ACALL D1MS

SETB P3.7

MOV A,LED4

MOVC A,@A+DPTR

MOV P1,A

CLR P1.7

CLR P3.5

ACALL D1MS

SETB P3.5

RET

;*************;

; 显示灭灯程序;

;*************;

LEDOFF: MOV LED0,#0DH; 灭灯

MOV LED1,#0DH

MOV LED2,#0DH

MOV LED3,#0DH

MOV LED4,#0DH

ACALL DISPLAY

LCALL DLS1

RET

;*******;

;延时程序;

;*******;

D1MS: MOV R7,#2; 显示延时程序

DJNZ R7,$

RET

DL1S: LCALL DL05S; 延时程序,用作按键时间的长短判断LCALL DL05S

RET

DL05S: MOV R5,#80H

DL05S1: LCALL DISPLAY0

DJNZ R5,DL05S1

RET

DLS1: SETB P1.7; 开机显示延时程序

JNB P1.7,STAR; 如清零键按下跳至清零确认程序

MOV R6,#50H

DLS2: LCALL DL05S

LCALL DISPLAY0

DJNZ R6,DLS2

RET

DLS3: MOV R6,#40H

DLS4: LCALL DL05S

LCALL DISPLAY0

DJNZ R6,DLS4

RET

STAR: LJMP CLEAR

LODLED: MOV P1,#0FFH;

MOV P3,#0FFH

MOV LED4,#0DH;

MOV LED3,#0DH

MOV LED2,#0DH

MOV LED1,#0DH MOV LED0,#0AH ACALL DISPLAY0 LCALL DLS3

MOV LED1,#0AH MOV LED0,#0BH ACALL DISPLAY0 LCALL DLS1

MOV LED2,#0AH MOV LED1,#0BH MOV LED0,#0CH ACALL DISPLAY0 LCALL DLS3

MOV LED3,#0AH MOV LED2,#0BH MOV LED1,#0CH MOV LED0,#013H ACALL DISPLAY0 LCALL DLS3

MOV LED4,#0AH; MOV LED3,#0BH; MOV LED2,#0CH; MOV LED1,#013H; MOV LED0,#0EH; LCALL DLS1 LCALL DLS1 MOV LED4,#2H; MOV LED3,#0H; MOV LED2,#0H; MOV LED1,#5H; MOV LED0,#3H; LCALL DLS1 LCALL DLS1

MOV LED4,#0DH; MOV LED3,#0DH MOV LED2,#0DH MOV LED1,#0DH MOV LED0,#0EH ACALL DISPLAY0 LCALL DLS3

MOV LED1,#0EH MOV LED0,#0FH ACALL DISPLAY0

实验四 计数器电路设计

实验四、计数器电路的设计 一、实验目的 1、掌握计数器电路的设计方法; 2、进一步掌握电路的设计、编译、仿真和下载测试的方法。 二、实验要求 1、基本要求 1)设计一个具有异步复位和同步使能的4位二进制加法计数器 2)设计一个具有异步复位和同步使能、并行置数的加减可控的8位二进制计数器 3)设计一个具有异步复位和同步使能的BCD码加法计数电路, 2、扩展要求 1)设计一个具有异步复位和同步使能的六十进制加法计数电路 2)设计一个具有异步复位和同步使能的二十四进制加法计数电路 三、实验原理 四、实验内容及步骤 1、建立一个工程项目,路径如:D:\A0512301\forth,项目名和顶层实体名为count。 2、设计一个具有异步复位和同步使能的4位二进制计数器,并进行编译仿真与下载测试; 3、设计一个具有异步复位和同步使能、并行置数的加减可控的8位二进制计数器,并进行编译仿真与下载测试; 4、设计一个具有异步复位和同步使能的十进制加法计数电路,并进行编译仿真与下载测 试; 五、参考程序 1、四位加法计数器 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END ; ARCHITECTURE bhv OF CNT4 IS SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= Q1 + 1 ; END IF; END PROCESS ; Q <= Q1 ; END bhv; 2、异步复位,同步使能十进制加法计数器 LIBRARY IEEE;

c语言程序设计课程计算器设计报告

课程设计说明书 题目计算器程序设计 起讫日期2006 年7月3日至2006 年8月6日 所在院系软件学院 专业机械+软件班级04-2 学生姓名偶偶哦学号 指导教师 2006年8 月日

摘要 当今社会是信息社会,科技经济高速发展的社会!为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。由于它体积小巧,携带方便,价格便宜,构造简单等诸多的优点成为人们生活中的必备品! 随着科技的发展计算器的种类变得更多,功能变得更强大,体积变得更小!电脑的出现改变人们的生活习惯,很多事情都可以电脑来完成!电脑的更大一个优点就是可以通过软件的应用无限的延伸电脑功能的外延!下面我们将用我们学习的c语言编写一个简易的计算器程序!实现简单的初步的计算功能! 本程序的编写基础是Tubro C2.0汉化版,它在tubro c的原有基础上实现了多汉字的支持方便了我们的使用。生成的程序可移植性强兼容性好稳定!现在只实现了加、减、乘、除、求幂、求模,求平方根,求Sin,求Cos,求Log10,以及一个时钟原代码。这个系统是基于软件发展的生命周期来研制的,它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。但是,每次只能运算一个表达式。不能运算多个表达式。在程序里面在添加一组选择函数即可。本论文主要介绍了本课题的开发背景,开发的过程和所要完成的功能。重点的说明了系统设计思想,设计的步骤、难点技术和解决方案。 关键词:C语言T ubro c 2.0汉化版计算器时钟

目录 第一章综述 (1) 1.1 课题的现实意义 (1) 1.2 软件环境 (1) 1.3 硬件环境 (1) 第二章系统设计流程图 (2) 2.1 系统流程图 (2) 2.2 主要功能表 (2) 第三章系统分析和设计 (3) 3.1 图形的绘制和输出 (3) 3.2 文本的输出显示 (3) 3.3 计算函数的调用 (4) 3.4 程序的运行和退出 (5) 第四章系统测试 (6) 4.1 系统测试 (6) 4.2 调试 (6) 4.3 错误原因分析一 (6) 4.4 错误原因分析二 (6) 第五章用户使用说明书 (8) 5.1 运行Turbo C程序进入计算器界面 (8) 5.2 计算器的使用 (9) 5.3 退出程序 (9) 第六章工作总结 (10) 参考文献 (11) 附录: 源代码

GUI设计的简易计算器附程序

电子信息工程系实验报告 课程名称:MATLAB 应用 实验项目名称:GUI 计算器设计 实验时间:2012-11-22班级:测控081姓名:学号:810707132实验目的: 1.熟悉MATLAB 的菜单设计方法 2.熟悉MATLAB 的主要控件使用方法 3.熟悉MATLAB 的GUI 设计流程 4.运用MATLAB 的GUI 设计一个简单的计算器 实验环境: MATLAB7.8 实验内容: function varargout =jisuanqi1(varargin)%JISUANQI1M-file for jisuanqi1.fig %JISUANQI1,by itself,creates a new JISUANQI1or raises the existing %singleton*.%%H =JISUANQI1returns the handle to a new JISUANQI1or the handle to %the existing singleton*.%%JISUANQI1('CALLBACK',hObject,eventData,handles,...)calls the local %function named CALLBACK in JISUANQI1.M with the given input arguments.%%JISUANQI1('Property','Value',...)creates a new JISUANQI1or raises the %existing singleton*.Starting from the left,property value pairs are %applied to the GUI before jisuanqi1_OpeningFunction gets called.An %unrecognized property name or invalid value makes property application %stop.All inputs are passed to jisuanqi1_OpeningFcn via varargin.%%*See GUI Options on GUIDE's Tools menu.Choose "GUI allows only one %instance to run (singleton)".%%See also:GUIDE,GUIDATA,GUIHANDLES %Edit the above text to modify the response to help jisuanqi1 %Last Modified by GUIDE v2.505-Dec-201022:24:59 %Begin initialization code -DO NOT EDIT gui_Singleton =1;成 绩: 指导教师(签名):

C语言程序设计之简单计算器

攀枝花学院 学生课程设计(论文) 题目:简易计算器 学生姓名:葛肪瑜学号:201010801018 所在院(系):计算机学院 专业:计算机科学与技术 班级:10计本(1)班 指导教师:陈三清职称:讲师 2011年6月25日 攀枝花学院教务处制

攀枝花学院本科学生课程设计任务书 题目计算器的设计 1、课程设计的目的 本课程设计的目的和任务:(1)巩固和加深学生对C语言课程的基本知识的理解和掌握;(2)掌握C语言编程和程序调试的基本技能;(3)利用C语言进行简单软件设计的基本思路和方法;(4)提高运用C语言解决实际问题的能力。 2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等) 一、用C实现如下功能: 使用C语言编写一个类似于Windows附件提供的计算器软件,实现计算器的基本功能,能进行浮点数的加、减、乘、除、乘方和求模运算。 二、撰写课程设计报告或课程设计总结课程设计报告要求:总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。 3、主要参考文献 [1] 潭浩强,《C程序设计》,清华大学出版社 [2] 王声决,《C语言程序设计》,中国铁道出版社 [3] 潭浩强,《C程序设计题解与上机指导》,清华大学出版社 [4] 刘玲等,《C语言程序设计应用教程》,西南师范大学出版社 4、课程设计工作进度计划 第1天完成方案设计与程序框图 第2、3天编写程序代码 第4天程序调试分析和结果 第5天课程设计报告和总结 指导教师(签字)日期年月日 教研室意见: 年月日 学生(签字): 接受任务时间:年月日注:任务书由指导教师填写。

数字电路设计--------二十四进制计数器

数字电路设计 姓名:*** 学号:****************** 班级:电信111 专业:电子信息科学与技术 一.设计题目 二十四进制计数器的设计 二.设计要求 (1)要求学生掌握74系列的芯片和LED的原理和使用方法。 (2)熟悉集成电路的使用方法,能够运用所学的知识设计一规定的电路。三.设计任务 (1)完成一个二十四进制的计数器。 (2)LED显示从00开始,各位计数从0—9,逢10 进1,是为计数0—5。23显示后,又从00重新开始计数。 四.设计思路与原理 (一)设计思路框图 →→→ → (二)LED简介 LED是一种显示字段的显示器件,7个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。七段发光管分别称为a、b、c、d、e、f,g,构成字型“8”,如图(a)

所示,当在某段发光二极管上施加一定的电压时,某些段被点亮发光。不加电压则变暗,为了保护各段LED不被损坏,需外加限流电阻。 其真值表如下:

(三)原件总汇表:计数器74LS00D(U7A,U7B),74HC390N-6V(U3A,U6A),74LS47N(U1,U5);与门:时钟脉冲:显示器:发光二极管:电感:电容:电源 五.电路图仿真 二十四进制计数器电路仿真

六.心得体会 通过这一次的数字电路设计,是我更深的了解到了数字电路的基础知识,电路分析与计算的方法。利用仿真软件对电路进行一系列的分析仿真,更加抽象的将理论知识与实际电路结合在一起,加深了对数电一些基本定理的理解与运用。虽然在这学期中,数字电子技术基础学的不是很好,但是在这次的课程设计中通过同学的帮组还是完成了。虽然做的不是很好,但是从中也让我明白了:要想做好这个课程设计,就必须认认真真地去做,不要怕麻烦,遇到不懂的问题就要主动去问同学或者老师。和查阅材料,保持着一个积极向上的心态,发挥我们自己的主观能动性和创造了才能让我们做的更好。在这次课程设计中让我学到了很多东西,在经过我们一个学期的数字电子技术基础课后,我们已经对数字电子技术有一定的了解,让我们有了一定的基础可以独立完成数字电子技术基础课程设计了,不过当中还是遇到许多不懂的问题。

计算器程序设计报告

题目一计算器 1.1 题目简介 用Java语言、MyEclipse工具、设计一个GUI简易计算器,编写计算器的基本运算的程序,用户可以通过鼠标一次输入参加计算的数值,进行加减乘除等混合运算,基本实现计算器的四则运算和三角函数运算功能以及开方和求对数的基本运算。本计算器只适用十进制的运算,不限制十进制的大小。编写本计算器运用java的类得调用和直接在程序中定义类,实现计算器的基本功能,在这个计算器中对于执行的操作可以进行复制和保存以便以后能直接查看运行结果本计算器保存没不得运行结果,只有点清除键是才可以清除每步的结果。 1.2 设计的内容、要求和目标 设计内容:设计一个GUI简易计算器,用户可以通过鼠标一次输入参加计算的数值,进行加减乘除等混合运算。 设计要求:由于现代用户更倾向于由鼠标方便操作的图形用户界面,所以我们采用GUI来实现计算器,并采用Swing组件,AWT事件来处理等实现具体功能。 (1)、应具有相应的界面,可参考下图进行设计:

(2)、操作符号定为:“+”“-”,“*”,“/”等。 (3)、用户通过点击面板中的各种组件输入的表达式,应在上方文本框。 (4)、党用户点击“=”时,文本框中之前的内容应清空,直接显示表达式运算结果。例如:输入表达式“7*8”之后按“=”,显示结果“56”。 (5)、具有菜单栏,内有相应的编辑“复制”、“粘贴”等菜单,提供相应的功能。 设计目标:利用Java语言设计一个简单的计算器,以实现基本的加减乘除功能,还有sin、|cos、tan、log等算术运算;同时实现退格、清零等运算。 1.3总体设计 1)、对计算器面板的整体布局 首先是对计算器的整体面板进行一个简单的设计,整体布局是采用layout (边框布局)布局,对计算器中的一些数字按钮和运算符按钮采用gridlayout 布局(网格布局)。 2)、创建实现程序所需的类 整理思路,确定一个主类CalculatorWindow,然后对Dialog、HandleBack、HandleClear、HandleCos、HandleCot、HandleSin、HandleTan、HandleDigit、HandleDot、HandleDownNumber、HandleEquality、HandleLog、HandleOperation、HandlePOrN、HandlePositiveOrNegative、NumberButton、OperationButton、SelectJTree等类的创建。 3)、对所创建类算法的分析和实现 确定了主类CalculatorWindow,其他类为其所调用。编写各类的实现算法,增加面板所需的按钮,并对程序进行调试运行及分析。

简易计算器的设计与实现

沈阳航空航天大学 课程设计报告 课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现 院(系): 专业: 班级: 学号: 姓名: 指导教师: 完成日期:

沈阳航空航天大学课程设计报告 目录 第1章总体设计方案 (1) 1.1设计内容 (1) 1.2设计原理 (1) 1.3设计思路 (2) 1.4实验环境 (2) 第2章详细设计方案 (3) 2.1硬件电路设计 (3) 2.2主程序设计 (7) 2.2功能模块的设计与实现 (8) 第3章结果测试及分析 (11) 3.1结果测试 (11) 3.2结果分析 (11) 参考文献 (12) 附录1 元件清单 (13) 附录2 总电路图 (14) 附录3 程序代码 (15)

第1章总体设计方案 1.1 设计内容 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。显示采用6位8段共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬件电路。 1.2 设计原理 在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 1)提出方案 以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。 2) 总体方案实现 (1)要解决键值得读入。先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测---就是延时10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码

具有加减识别功能的绕线机电子计数器

目录 摘要 (2) 前言 (3) 第一章设计方案 (4) 1.1设计目的 (4) 1.2设计要求 (4) 1.3总原理框图 (4) 1.3各单元框图电路设计 (4) (1)信号采集电路 (4) (2)加减识别电路 (5) (3)计数、译码、驱动、显示 (7) 第二章相关元器件介绍 (9) 2.1红外发射接收对管 (9) 2.2施密特触发器 (10) 11 (12) 2.5 CD4013-双上升沿D触发器 (12) 2.6 CD40110 (14) 第三章具有加减识别功能的绕线机电子计数器总电路 (16) 3.1总电路图 (16) 3.2总电路原理 (17) 第四章结论 (18) 参考文献 (19) 致谢 (20)

摘要 绕线机是用来绕制线圈的专用设备,而计数器则起到了计数作用。通过计数器我们可以了解产品的工作状态。绕线机种类很多,由于各种线圈产品的功能要求不同,目前常见绕线机的有全自动绕线机、半自动绕线机、环形绕线机、伺服精密绕线机、变压器绕线机、电感线圈绕线机等机种。本课程设计主要是通过红外线传感器来计数绕线机转数,然后通过计数,锁存,译码等步骤最终在数码管显示数字。 关键词:绕线机,CD4013,CD40106,CD40110,红外对管 Abstract Coiling machine is used for the special equipment of Coilingaround the system, and counter does the count function. Through the counter we can understand the working state of the products. Coiling machine type many, because all kinds of different requirements for the product function coil, the most common of the winding machine fully automatic winding machine, semi-auto coiling machine, annular coiling machine, servo precision coiling machine, transformer winding machine, inductance coil winding machine model. This course is designed by infrared sensors to count coiling machine RPM, and then through the count, lock to save, steps in the digital decoder eventually pipe display Numbers Keyword:coiling machine,CD4013,CD40106,CD40110,infrared geminate transistors 前言 绕制绕组设备一般都装计数器,常用的计数器有机械式和电子式计数器。在绕组绕制中,当绕组匝数达到一定值停机,由于绕线机转动惯量很大,绕线机不会立刻停止转动,即使提前采取措施也很难绕到规定匝数,还去要正转或者反转调整。为此我们需要设计一个绕线机计数器来对绕线机转数进行计数控制。而数字式电子计数器有直观和计数精确的优点,目前已在各种行业中普遍使用。数字式电子计数器有多种计数触发方式,它是由实际使用条件和环境决定的。有采用机械方式的接触式触发的,有采用电子传感器的非接触式触发的,光电式传感器是其中之一,它是一种非接触式电子传感器,利用光电元件制成的自动计数装置。其工作原理是从光源发出的一束平行光照射在光电元件(如光电管、光敏电阻等)上,每当这束光被遮挡一次时,光电元件的工作状态就改变一次,通过放大器可使计数器记下被遮挡的次数。常用于记录成品数量或展览会参观者人数。这种计数器在工厂的生产流水线上作产品统计,有着其他计数器不可取代的优点。该例光电触发式电子计数器只有两位数,但通过级联可以扩展为四位,甚至多位。

c面向对象程序设计MFC简单计算器实验报告

计算机与信息工程学院 《程序设计基础》课程设计报告 题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东 学生学号:2011508154 专业班级:电子信息工程(1)班 指导教师:高攀

1 课程设计的题目 编写一个能实现简单功能的计算器 2 题目要求 1. 有一个计算器图形。 2. 能实现加、减、乘、除及乘方的运算。 3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色 例如:输入数字1 时,在计算器图形上的1键变为红色。 4. 屏幕、图形颜色、形状自定 3 总体设计 3.1 总体框架 图1 系统框架

3.2 系统功能说明 在VC++6.0中绘制计算器界面,各控件的设置 对0~9控件设定相应的ID和其他属性: 图2 “1”控件设置 对“+、-、*、\”控件设定相应的ID和其他属性: 图2 “+”控件设置 对其它控件设定相应的ID和其他属性: 图3 其它控件设置

主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。 4 程序详细设计 4.1系统主调模块 图5 程序流程图

4.2各模块详细设计 4.2.1 建立的变量,控件的命名,对应的消息处理函数对应表 double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。 double m_Dis; //Edit控件上需要显示的数字 BOOL point_flag; //小数点表示位,判定是否是小数,是小数为1,不是小数为0。 double numfirst; //保存计算过程中的前一个数字, double numsecond;//保存计算过程中的第二个数字 char op;//记录当前的计算符号,可以为’+’,’-’,’*’,’/’,’=’,’c’,’n’ 变量初始化: poz=1; m_Dis = 0.0; numfirst=0; numsecond=0; op=0;

《计算器程序设计》课程设计

成都理工大学 C#计算器 课程设计报告(计算机科学与技术学院) 题目:计算器 班级:XX 姓名:XXX 指导教师:XXX 2013-2014学年度第二学期

目录 1.需求分析 (1) 1.1计算器应用软件的功能分析(二级标题,四号黑体) (1) 1.2计算器软件的功能图 (1) 2.界面设计 (1) 3.功能实现 (2) 3.1计算数字现实的功能代码 (2) 3.2小数点设置的功能代码 (3) 3.3连续运算的功能代码 (3) 3.4实现键盘控制的功能代码 (4) 3.5删除的功能代码 (5) 4.设计总结 (5) 参考文献 (6)

计算器的开发与应用 摘要:计算器的产生和发展是建立在电子计算机基础之上的,现代社会很需要一个健全、高效率的计算器。为了提高自己的实践能力和将来开发一个更实用更全能更智能的计算器,以设计与实现计算器为课题。此次设计的计算器应用软件从visual studio 2012编程环境中开发,是一个简单的窗体应用程序,实现简单的计算器功能。以微软自带的计算器为模板,设计了简单易懂的计算器。这款计算器不仅实现了简单的四则运算的功能,还能连续运算,实现小键盘的操作,光标的转移。虽然这个简单的计算器只能实现这些功能,但是具有简洁的图文外观,即时准确的获得所需要要计算的结果,充分降低了数字计算器的难度和所需要的时间,对人们生活和学习具有有很大的帮助。 关键词:计算器;功能;界面;窗口;事件。 1.需求分析 通过对微软附件计算器软件进行调研、分析,研究,使用。我们了解到了作为一个计算器所应该有的一些简单功能和界面的排版,我们知道了怎样使编写的计算器程序向微软附件计算器靠拢。 1.1计算器应用软件的功能分析 计算器软件的主要功能是: 1)可以显示计算数字 2)可以进行加减乘除四则运算 3)可以实现键盘操控的功能 4)可以进行清零运算 5)可以进行退格键运算 6)可以进行连续计算 1.2计算器软件的功能图 根据以上需求分析,计算器软件功能如图1-1所示。 2.界面设计计算器主界面 显示 计算 数字 连 续 计 算 功 能图1-1计算器功能图 进 行 四 则 运 算 键 盘 操 控 清 零 运 算 退 格 键 功 能

基于单片机的简易计算器设计

目录 引言 (1) 第一章设计原理及要求 (2) 1.1设计方案的确定 (2) 1.2系统的设计方案 (2) 1.3系统的设计要求 (2) 第二章硬件模块设计 (4) 2.1单片机AT89C51 (4) 2.1.1 AT89C51芯片的特点 (5) 2.1.2 管脚说明 (5) 2.1.3 振荡器特性 (7) 2.1.4 芯片擦除 (7) 2.2键盘控制模块 (7) 2.2.1 矩阵键盘的工作原理 (8) 2.2.2 键盘电路主要器件介绍 (8) 2.3LCD显示模块 (10) 2.3.1 显示电路 (11) 2.3.2 LCD1602主要技术参数 (11) 2.3.3 引脚功能说明 (11) 2.4运算模块(单片机控制) (12) 第三章软件设计 (14) 3.1功能介绍 (14) 3.2系统流程图 (14) 3.3程序 (16) 第四章系统调试 (17) 4.1软件介绍 (17) 4.1.1 Keil uVision2仿真软件简介 (17) 4.1.2 protues简介 (17)

4.2软件调试 (18) 4.2.1 软件分析及常见故障 (18) 4.2.2 仿真结果演示 (20) 4.3硬件调试 (21) 结束语 (23) 参考文献 (24) 附录 (25) 致谢 (36)

引言 计算工具最早诞生于中国,中国古代最早采用的一种计算工具叫筹策,也被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的,约二百七十枚一束,放在布袋里可随身携带。另外直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加、减、乘、除、乘方和开方运算,甚至可以计算三角函数、指数函数和对数函数。这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了第一部机械式计算器,在他的计算器中有一些互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现在另一个窗口中,但是它只能做加减运算。1694年,莱布尼兹在德国将其改进成可以进行乘除的计算。此后,一直到20世纪50年代末才有电子计算器的出现。

具有加减识别功能的绕线机电子计数器

目录 摘要................................................................................................................................ 错误!未定义书签。前言................................................................................................................................ 错误!未定义书签。第一章设计方案 .. (4) 1.1设计目的 ......................................................................................................... 错误!未定义书签。 1.2设计要求 ......................................................................................................... 错误!未定义书签。 1.3总原理框图..................................................................................................... 错误!未定义书签。 1.3各单元框图电路设计................................................................................... 错误!未定义书签。 (1)信号采集电路 ......................................................................... 错误!未定义书签。 (2)加减识别电路 ......................................................................... 错误!未定义书签。 (3)计数、译码、驱动、显示 ..................................................... 错误!未定义书签。第二章相关元器件介绍. (9) 2.1红外发射接收对管 (9) 2.2施密特触发器 (10) 2.3 ST188 (11) 2.4芯片CD40106.................................................................................... 错误!未定义书签。 2.5 CD4013-双上升沿D触发器 (12) 2.6 CD40110............................................................................................. 错误!未定义书签。第三章具有加减识别功能的绕线机电子计数器总电路.............. 错误!未定义书签。 3.1总电路图 ........................................................................................................ 错误!未定义书签。 3.2总电路原理.................................................................................................... 错误!未定义书签。第四章结论 ............................................................................................................. 错误!未定义书签。参考文献 ..................................................................................................................... 错误!未定义书签。致谢................................................................................................................................ 错误!未定义书签。

简单计算器c++课程设计讲解

简单计算器 1 基本功能描述 简单计算器包括双目运算符和单目运算符。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。 2 设计思路 如图1,是输入数据子函数的流程图。打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。 如图2,是整个计算器的流程图。对于输入的算式,判断运算符是双目运算符还是单目运算符。如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。结束程序。

输入一个数字 在之前输入的数字字符后面加上现在的数字字符。 Eg :m_str+=”9”。 直接使编辑框显示所输入的数字字符。 Eg :m_str=”9”。 pass3=1表示已有数字输入 开始 之前是否有数字输入? pass3==1? 继续键入数字? 用UpdateData(FALSE)刷新显示 图1 输入数据子函数流程图 Y N Y N

输入开始 双目运算符 是否每一个操作数都存入a[]数组? 把操作数存入a[z+2],把运算符存入b[z+1]。 单目运算符 将字符串转换 为可计算的数进行运算 运算是否合法? 将结果存入a[0] 弹出对话框提示错误 结束Y Y N N 图2 简单计算器总流程图

数字电路实验 计数器的设计

数字电路与逻辑设计实验报告实验七计数器的设计 姓名:黄文轩 学号:17310031 班级:光电一班

一、实验目的 熟悉J-K触发器的逻辑功能,掌握J-K触发器构成异步计数器和同步计数器。 二、实验器件 1.数字电路实验箱、数字万用表、示波器。 2.虚拟器件: 74LS73,74LS00, 74LS08, 74LS20 三、实验预习 1. 复习时序逻辑电路设计方法 ①根据设计要求获得真值表 ②画出卡诺图或使用其他方式确定状态转换的规律 ③求出各触发器的驱动方程 ④根据已有方程画出电路图。 2. 按实验内容设计逻辑电路画出逻辑图 Ⅰ、16进制异步计数器的设计 异步计数器的设计思路是将上一级触发器的Q输出作为下一级触发器的时钟信号,置所有触发器的J-K为1,这样每次到达时钟下降沿都发生一次计数,每次前一级 触发器从1变化到0都使得后一级触发器反转,即引发进位操作。 画出由J-K触发器组成的异步计数器电路如下图所示:

使用Multisim仿真验证电路正确性,仿真图中波形从上到下依次是从低位到高位 触发器的输出,以及时钟信号。: 可以看出电路正常执行16进制计数器的功能。 Ⅱ、16进制同步计数器的设计 较异步计数器而言,同步计数器要求电路的每一位信号的变化都发生在相同的时间点。

因此同步计数器各触发器的时钟脉冲必须是同一个时钟信号,这样进位信息就要放置在J-K 输入端,我们可以把J-K端口接在一起,当时钟下降沿到来时,如果满足进位条件(前几位触发器输出都为1)则使JK为1,发生反转实现进位。 画出由J-K触发器和门电路组成的同步计数器电路如下图所示 使用Multisim仿真验证电路正确性,仿真图中波形从上到下依次是从低位到高位触发器的输出,计数器进位输出,以及时钟信号。:

my计算器程序设计报告

计算器程序设计报告 计算器是一种在日常生活中很常用的计算工具,它在计算方面给了我们提供很大的方便。本程序的功能包括:(1)加,减,乘,除运算,正弦,余弦,正切,余切,反正切,反余切,反正弦,反余弦,自然对数,以10为底的对数还有阶乘等函数功能。(2)还包括存储清,存储显示,存储相加。 “计算器”是一个关于多种控件,以及控件数组应用的程序,它包含许对字符串的处理,多模块程序设计,数学函数的使用。它所需知识点较多,必须对各个方面都有所了解. 数学模型:主界面 界面:进制转化界面 数学函数代码 代码:存储清代码 进制转化代码 第一步,要编辑计算器界面,如右图, 对于界面上的按钮较多,我们可以分成四组,这就是控件数组的使用,而且每个按钮的属性都一一设置,而且要调入图片.第二个界面如右图 比较简单,只是一些普通的控件. 计算器是一个输入原始数据,运算中间数据和结果数据都显示在窗口顶部的同一个文本框的工具,这就要求我们可以把文本框的内容付给两个不同的变量,对于这一点我们就可以用一个逻辑变量来实现.比如, If not boolean str1=str Else str2=str 计算器的主要功能就是运算,但是任何一个数值的输入都是以字符串的形式进行的,而字符串是无法参与运算的,所以必须用CInt()转换成整形变量,而输出时必须用CStr()转化成字符串的形式输出,更为麻烦的是,在进行进制转换时,两种变量之间的转换更为频繁。在编程过程中要时刻注意!就拿一个简单的程序中的一部分来说吧:

If not boolean then str=str1 Else str=str2 Str=text1.text n=CInt(str) ‘“将其转换成整形变量" ……. t4 =str( ) ‘“ 将返回值转换成字符串" 计算器的功能程序简单易懂,但编制过程极为烦琐,我在编程的过程中,体会最深的就是其过程有重复,但又不得再编,在这里尤其要注意,有些过程虽然相似,但它们却存在着质的区别,就拿删除按扭来说吧, "C","0->M","CE","->"按扭都有删除的功能,在这里我就它们的区别作一下详细介绍: 将"C","CE","->"作为一个控件数组,其程序如下: If not boolean str1=str else str2=str Select Case Index Case 0 str1=" ",str2=" ", Text1.text=" " "C"键 Case1 str=" " "CE"键 Case2 str=Left(str,len(str)-1) "->"键 而"0->M"在另一个数组控件中,其程序的一部分如下: Case0 n4=0: Text1.text="0" 可见它们的代码是存在区别的,这就要求在编程时弄清楚它们的区别,不可想当然把同一种代码复制过来. 这里我再介绍一下小数点的使用 Private Sub Command2_Click(Index As Integer) If Index<10 Then str=str+CStr(Index) "输入数字" Else If InStr(str,".")=0 Then str=str+"." "输入小数点" End If If Len(str)>1 And Left(str,1)="0" And Mid(str,2,1)<>"."Then str=Right(str,Len(str)-1) "删除前面多余的0" End If Text1.text=str "显示输入的数据 " If not boolean Then str1=str Else str2=str "用两个字符串变量存放" End Sub 计算器虽复杂,但大部分还是比较简单的,最难的地方就是进制转换器的编码了,要编好这一部分必须对各进制之间的转换关系了如指掌.其中各个进制都和二进制有着直接的转换关系.而其他三个之间都不可直接进行转换.对于不能直接转化的,可以间接转化,例如,可以将十六进制先转化成十进制然后再转化成八进制. ElseIf Option4 = True Then t4 = "" str = Text1.Text

单片机设计简易计算器

简易计算器 Simply Calculator 1 设计思想 此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分主要完成单片机输出的显示。 本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。设计大致可以分为三个步骤:第一步,硬件的选取和设计;第二步,程序的设计和调试;第三步,Protues 系统仿真。 硬件是设计的骨骼,不仅关系到设计总体方向的确定,还要综合考虑节能,环保,以及稳定性和经济性等各种因素。因此需要花费大量的时间。硬件的选取最为重要,包括选用的芯片,显示设备的选取,输入设备的选取等。本设计是通过单片机来实现的,因此选用了ATMEGA16单片机作为主体,输入设备选用矩阵键盘。程序是硬件的灵魂,是实现设计的中心环节。本设计使用的程序语言是C语言,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件,以备在Protues中仿真使用。程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。本设计中就出现了大量的错误,经过认真修改,最终才能运行出正确结果。最后的系统仿真是设计是否成功的验证,是设计不可缺少的重要环节。这就要求能掌握Protues的一些基本操作。2原理分析 2.1矩阵键盘的扫描 图2.1 矩阵键盘图

如图2.1所示,单片机的8个I/O口和矩阵键盘相连,用8个I/O口来控制矩阵键盘的16个按键是非常有意思的,首先我们设置单片机的PD0—PD7为输出,且PD0—PD3依次设置为低电平,而PD4—PD7设置为高电平,然后我们设置PD4—PD7为输入,而PD0—PD3仍然为输出,假如此时M1键按下,则PD0与PD4相连,因为PD0是低电平,而PD4是输入,所以PD4会被拉为低电平,同理,如果M2被按下,则PD5会被拉低,M3按下,PD6会被拉低,M4按下,PD7被拉低。这是判断有无键盘按下的过程,当我们判断是那一个键盘按下时,我们首先设置8个I/O口为输出,输出为FE,即,PD0为低电平,其他全为高电平,然后我们设置PD4—PD7为输入,如果M1被按下,则PD4会比被拉为低电平,此时会变成EE,同理可以知道M2被按下时会变为DE,M3被按下时会变为BE,M4被按下时会变为7E。同理我们可以设置8个I/O口输出FD来检测M5—M8是否被按下,设置8个I/O口输出FC来来检测M9—M12,设置8个I/O口输出F7来检测M13—M16,如果M1—M4没有被按下,就继续检测M4—M8,一次类推,就可以检测出16个按键了。在这次设计中,16个按键M1—M16所对应检测值分别为:EE,DE,BE,7E,ED,DD,BD,7D,EB,DB,BB,7B,E7,D7,B7,77。 2.2 数字显示与计算 本次设计选用的显示器是1602液晶显示器,此液晶显示器能显示32个字符,VSS接地,VDD接电源正极,E为时使能信号,R/W为读写选择端(H/L),RS为数据/命令选择端(H/L),D0—D7为数据I/O口。 首先我们初始化液晶显示器,然后显示出第一个被按下的数,并且使光标右移,如果有第二个数按下,则据继续显示,以此类推,然后把所有显示出来的数换算成一个数,如果按下“+”号,则显示出“+”,并且同理显示出“+”号后面按下的数字,然后调用加子程序,运算出结果,如果按下的是“-”,则调用减子程序,如果按下“*”,则调用乘子程序,如果按下“/”,则调用除子程序。然后再调用显示结果子程序,显示出结果。

相关文档