汇编程序—数码管显示实验
基础实验(数码管显示)含代码
实验一基础实验(数码管显示)一、实验内容使用MCS-51汇编语言编写程序,完成如下功能:1. 使用三个数码管显示十进制数值(001~999,可任意设置);2. 每隔1秒,该数值自动减一,直到归零;3. 归零后的下一秒,显示一个新的十进制数值(001~999,可任意设置);4. 每隔1秒,新数值继续自动减一,直到再次归零;5. 重新执行步骤1,循环往复。
6. 当开关S1按下时,暂停计数;S1松开时,恢复计数。
二、数码管显示原理如图所示,三段式数码管由三片74HC164级联控制三个数码管的显示,其中使用单片机P4.5作为模拟串口数据,使用P4.4模拟串口时钟,CLR端接高电平。
使用上一个74HC164的Q7作为下一个74HC164的输入端。
要想输出一个字形码,就需要从高位到低位依次向移位寄存器输出8个比特。
移位寄存器的数据线和时钟线分别接到单片机的P4.5和P4.4管脚,可以使用MCS-51里面的位操作指令进行输出。
连续输出3个字形,24个bit之后,欲显示的字形将稳定地显示在数码管上,程序可以转而执行其他工作。
三、实验流程图1.主程序流程图开始初始化定义计数器R6,R5,R4定义码表TAB 0-9根据R6偏移从TAB取数送到算术寄存器A中调用SHOW子程序根据R5偏移从TAB取数送入算术寄存器A中调用SHOW子程序根据R4偏移从TAB取数送入算术寄存器A中调用SHOW子程序调用延时子程序S1按下?是循环延时否R6减一即个位减一R6为-1?是R5减一即十位减一重新初始化R6否R5为-1?否是R4减一即百位减一重新初始化R5R4为-1?重新初始化R4否2.显示子程序SHOW 流程图3.延时子程序DELAY 流程图子程序SHOW 开始R0初始化计数时钟置0右移AC 标志位送入DATA时钟置1,上跳R0=0?是RET否子程序DELAY 开始RI 初始化为80R3减一R3为0?是R2减一R2为0?是R1减一是R1为0?否R2初始化为200R3初始化为250否否是四、程序源代码 0000H2.LJMP START 0050H4.START:5.P4 EQU 0C0H6.P4SW EQU 0BBH7.CLK EQU P4.48.DAT EQU P4.59.SW EQU P3.610.MOV P4SW, #70H11.LP:12. MOV R6, #913. MOV R5, #914. MOV R4, #915.LOOP:16. MOV DPTR, #TAB17. MOV A,R618. MOV DPTR,#TAB19. MOVC A,@A+DPTR20. LCALL SHOW21.22. MOV A,R523. MOV DPTR,#TAB24. MOVC A,@A+DPTR25. LCALL SHOW26.27. MOV A,R428. MOV DPTR,#TAB29. MOVC A,@A+DPTR30. LCALL SHOW31. LCALL DELAY32.33.PAUSE:34. NOP35. JNB SW,PAUSE36. DEC R637. CJNE R6,#-1,LOOP38.39. DEC R540. MOV R6,#941. CJNE R5,#-1,LOOP42. DEC R443. MOV R5,#944. CJNE R4,#-1,LOOP45. MOV R4,#946. LJMP LOOP47.48.SHOW:49. MOV R0,#850.SLP:51. CLR CLK52. RLC A53. MOV DAT,C54. SETB CLK55. DJNZ R0,SLP56. RET57.58.DELAY:59. MOV R1,#8060.SD:61. MOV R2,#20062.SD1:63. MOV R3,#25064.SD2:65. DJNZ R3,SD266. DJNZ R2,SD167. DJNZ R1,SD68.RET69.70.TAB:71. DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H72.73.74.END75.TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H五、思考题1.MCS51中有哪些可存取的单元,存取方式如何?它们之间的区别和联系有哪些?答:MCS51单片机中,包含程序存储器ROM、数据存储器RAM和特殊功能寄存器(SFRs),其中数据存储器还包含内部RAM,内部扩展RAM和片外RAM。
单片机数码管静态显示实验程序(汇编)_共2页
单片机数码管静态显示实验程序org 00hnum equ p0;p0口连接数码管clr p2.0;mov dptr ,#tabclr amov r2,#0loop:movc a,@a+dptrmov num ,aacall delay_200msinc r2mov a,r2cjne r2,#15, loopmov r2,#0clr aajmp looptab :DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EHdelay_200ms:mov r3,#20delay:acall delay_10msdjnz r3,delayret;;;;;;;;;;;;;;;;非中断精确delay_1ms:MOV R7 ,#249signed:nopnopdjnz R7 ,signed 1MS定时程序;循环部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4机器周期ret;2+249*4+2=1000us;返回指令2机器周期可以精确定时1MS,假设外部晶振是12M;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;非中断精确10MS 定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov r6,#9;2个机器周期用2usdelay_10ms_sined: ;9次循环共用 9(1ms+4us)=9036us acalldelay_1msdjnz r6,delay_10ms_sinedMOV r6 ,#240;2个机器中期用 2ussigned_10ms :;循环部分 4机器周期共240次nopnopdjnz r6 ,signed_10msret;返回指令要2us;2us+9036us+240*4us+2us = 10ms 即可精确定时10ms ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;非中断精确定时 1s;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_1s:mov r5,#99delay_1s_signed:acall delay_10msdjnz r5,delay_1s_signed mov r5 ,#9signed_1s:acall delay_1msdjnz r5 ,signed_1smov r5 ,# 140signed_1s_:nopnopdjnz r5,signed_1s_;两个机器周期2us;循环指令周期为4us,加上延时10ms;(10ms+4us)*99 = 990.396ms;两个机器周期2us;循环指令周期为4us,加上延时1ms;(1ms+4us)*9 = 9ms+36us;机器周期2us;一次循环4us共有140次。
DS18B20汇编程序(完整版)
DS18B20汇编程序;实验目的:熟悉DS18B20的使用;六位数码管显示温度结果,其中整数部分2位,小数部分4位;每次按下RB0键后进行一次温度转换。
;硬件要求:把DS18B20插在18B20插座上; 拨码开关S10第1位置ON,其他位置OFF; 拨码开关S5、S6全部置ON,其他拨码开关全部置OFF;*****************以下是暂存器的定义*****************************#INCLUDE<P16F877A.INC>#DEFINE DQ PORTA,0 ;18B20数据口__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS _OSCCBLOCK 20HDQ_DELAY1DQ_DELAY2TEMPTEMP1TEMP2 ;存放采样到的温度值TEMP3COUNTCOUNT1ENDCTMR0_VALUE EQU 0AH ;寄存器初值为6,预分频比1:4,中断一次时间为4*(256-6)=1000usDQ_DELAY_VALUE1 EQU 0FAHDQ_DELAY_VALUE2 EQU 4H;**********************以下是程序的开始************************ ORG 00HNOPGOTO MAIN ;入口地址ORG 04HRETFIE ;在中断入口出放置一条中断返回指令,防止干扰产生中断TABLEADDWF PCL,1RETLW 0C0H ;0的编码(公阳极数码管)RETLW 0F9H ;1的编码RETLW 0A4H ;2的编码RETLW 0B0H ;3的编码RETLW 99H ;4的编码RETLW 92H ;5的编码RETLW 082H ;6RETLW 0F8H ;7RETLW 080H ;8RETLW 090H ;9;***************************主程序******************************* MAINCLRF PORTACLRF PORTBBANKSEL TRISACLRF TRISA ;A口所有先设置为输出CLRF TRISDMOVLW 01HMOVWF TRISB ;B0口为输入,其他为输出MOVLW 06HMOVWF ADCON1 ;关闭所有A/D口MOVLW 01HMOVWF OPTION_REG ;分频比1:4,定时器,内部时钟源BCF STATUS,RP0CLRF TEMPCLRF TEMP1CLRF TEMP2 ;清零临时寄存器MOVLW 8HMOVWF COUNTMOVLW 38HMOVWF FSRCLRF INDFINCF FSR,1DECFSZ COUNT,1GOTO $-3;****************************循环处理部分************************;先启动18B20温度转换程序,在判断温度转换是否完成(需750us);未完成则调用显示子程序,直到完成温度转换;完成后读取温度值;送LCD显示LOOPBTFSC PORTB,0 ;判断温度转换按键是否按下GOTO LOOP1 ;否,转显示CALL DELAY ;消抖BTFSC PORTB,0 ;再次判断GOTO LOOP1CALL RESET_18B20 ;调用复位18B20子程序MOVLW 0CCHMOVWF TEMPCALL WRITE_18B20 ;SKIP ROM命令MOVLW 44HMOVWF TEMPCALL WRITE_18B20 ;温度转换命令CLRF STATUSCALL DELAY_750MS ;调用温度转换所需要的750MS延时NOPCALL RESET_18B20MOVLW 0CCHMOVWF TEMPCALL WRITE_18B20 ;SKIP ROM命令MOVLW 0BEHMOVWF TEMPCALL WRITE_18B20 ;读温度命令CALL READ_18B20 ;调用读温度低字节MOVFW TEMPMOVWF TEMP1 ;保存到TEMP1CALL READ_18B20 ;调用读温度高字节MOVFW TEMPMOVWF TEMP2 ;保存到TMEP2CALL RESET_18B20LOOP1CALL TEMP_CHANGE ;调用温度转换程序CALL DISPLAY ;调用LCD显示程序GOTO LOOP ;循环工作;*********************复位DS18B20子程序************************** RESET_18B20;根据DATASHEET介绍,写数据时应遵照如下规定:;主控制器把总线拉低至少480us,;18B20等待15-60us后,把总线拉低做为返回给控制器的应答信号BANKSEL TRISABCF TRISA,0BCF STATUS,RP0BCF DQMOVLW 0A0HMOVWF COUNT ;160USDECFSZ COUNT,1GOTO $-1 ;拉低480usBSF DQ ;释放总线MOVLW 14HMOVWF COUNTDECFSZ COUNT,1GOTO $-1 ;等待60usBANKSEL TRISABSF TRISA,0 ;DQ设置为输入BCF STATUS,RP0BTFSC DQ ;数据线是否为低GOTO RESET_18B20 ;否则继续复位MOVLW 4HMOVWF COUNTDECFSZ COUNT,1 ;延时一段时间后再次判断GOTO $-1BTFSC DQGOTO RESET_18B20MOVLW 4BHMOVWF COUNTDECFSZ COUNT,1GOTO $-1BANKSEL TRISABCF TRISA,0 ;DQ设置为输出BCF STATUS,RP0RETURN;*********************写DS18B20子程序**************************** WRITE_18B20;根据DATASHEET介绍,写数据时应遵照如下规定:;写数据0时,主控制器把总线拉低至少60us;写数据1时,主控制器把总线拉低,但必须在15us内释放MOVLW 8HMOVWF COUNT ;8位数据BANKSEL TRISABCF TRISA,0BCF STATUS,RP0BCF STATUS,CWRITE_18B20_1BSF DQ ;先保持DQ为高MOVLW 5HMOVWF COUNT1BCF DQ ;拉低DQ15usDECFSZ COUNT1,1GOTO $-1RRF TEMP,1BTFSS STATUS,C ;判断写的数据为0还是1GOTO WRITE_0BSF DQ ;为1,立即拉高数据线GOTO WRITE_ENDWRITE_0BCF DQ ;继续保持数据线为低WRITE_ENDMOVLW 0FHMOVWF COUNT1 ;保持45msDECFSZ COUNT1,1GOTO $-1BSF DQ ;释放总线DECFSZ COUNT,1 ;是否写完8位数据GOTO WRITE_18B20_1RETURN;**********************读DS18B20子程序**************************** READ_18B20;根据DATASHEET介绍,读数据时应遵照如下规定:;读数据0时,主控制器把总线拉低后,18B20再把总线拉低60us;读数据1时,主控制器把总线拉低后,保持总线状态不变;主控制器在数据线拉低后15us内读区数据线上的状态。
数码管显示程序(汇编语言)
实验三数码显示一、实验目的了解LED数码管动态显示的工作原理及编程方法。
二、实验内容编制程序,使数码管显示“DJ--88”字样。
三、实验程序框图四、实验步骤联机模式:(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(2)数码管显示“DJ--88”字样。
脱机模式:1、在P.态下,按SCAL键,输入2DF0,按EXEC键。
2、数码管显示“DJ--88”字样。
五、实验程序清单CODE SEGMENT ;S6.ASM display "DJ--88"ASSUME CS:CODEORG 2DF0HSTART: JMP START0PA EQU 0FF20H ;字位口PB EQU 0FF21H ;字形口PC EQU 0FF22H ;键入口BUF DB ?,?,?,?,?,?data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1hdb 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1CON1: CALL DISPJMP CON1DISP: MOV AL,0FFH ;00HMOV DX,PAOUT DX,ALMOV CL,0DFH ;显示子程序 ,5msMOV BX,OFFSET BUFDIS1: MOV AL,[BX]MOV AH,00HPUSH BXMOV BX,OFFSET DATA1ADD BX,AXMOV AL,[BX]POP BXMOV DX,PBOUT DX,ALMOV AL,CLMOV DX,PAOUT DX,ALPUSH CXDIS2: MOV CX,00A0HLOOP $POP CXCMP CL,0FEH ;01HJZ LX1MOV AL,0FFH ;00HMOV DX,PAOUT DX,ALINC BXROR CL,1 ;SHR CL,1JMP DIS1LX1: MOV AL,0FFHMOV DX,PBOUT DX,ALRETBUF1: MOV BUF,0DHMOV BUF+1,19HMOV BUF+2,17HMOV BUF+3,17HMOV BUF+4,08HMOV BUF+5,08HRETCODE ENDSEND START。
STM32 汇编语言,按键控制数码管显示
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;按键控制数码管显示;;;;;;;;;;;;;;;;;;;;;;;共阳极接在PE口(PE[0..7]);;;;;;;;;;;;;;;;;;;;;;;;;;;按下按键则显示加1,显示0~F;;;;;;;;;;;;;;;;;;;;;;;;;;;2011-5-3 by 追梦;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BIT2 EQU 0X00000004BIT6 EQU 0X00000040BIT8 EQU 0X00000100GPIOE EQU 0X40011800 ;GPIOE 地址GPIOE_CRL EQU 0X40011800 ;低配置寄存器GPIOE_CRH EQU 0X40011804 ;高配置寄存器GPIOE_ODR EQU 0X4001180C ;输出,偏移地址0Ch GPIOE_BSRR EQU 0X40011810 ;低置位,高清除偏移地址10h GPIOE_BRR EQU 0X40011814 ;清除,偏移地址14h IOPEEN EQU BIT6 ;GPIOE使能位IOPAEN EQU BIT2 ;GPIOA使能位KEY EQU BIT8 ;按键在PA.8GPIOA EQU 0X40010800GPIOA_CRH EQU 0X40010804 ;高配置寄存器GPIOA_IDR EQU 0X40010808RCC_APB2ENR EQU 0X40021018STACK_TOP EQU 0X20002000AREA RESET,CODE,READONL YDCD STACK_TOP ;MSP主堆栈指针DCD START ;复位,PC初始值ENTRY ;指示开始执行STARTLDR R1,=RCC_APB2ENRLDR R0,[R1] ;读LDR R2,=IOPEENORR R0,R2 ;改LDR R2,=IOPAENORR R0,R2 ;改STR R0,[R1] ;写,使能GPIOA,E时钟;PE[0..7] 8个引脚均设置成推挽式输出LDR R0,=0x33333333LDR R1,=GPIOE_CRLSTR R0,[R1];PA.8--KEY 浮空输入MOV R0,#0X04LDR R1,=GPIOA_CRHSTR R0,[R1]LDR R1,=GPIOE_ODRMOV R0,#0XFFSTR R0,[R1] ;初始时数码管无显示LDR R2,=GPIOA_IDR ;R2用于扫描按键LDR R5,=DPYTABLELOOPLDR R3,[R2]AND.W R3,#KEYCMP R3,#0BNE LOOPPUSH {R0}MOV R0,#10BL.W DELAY_NMS ;延时10ms用于消除抖动POP {R0}LDR R3,[R2]AND.W R3,#KEYCMP R3,#0BNE LOOPADD R4,#1CMP R4,#15BLE KEYINMOV R4,#0KEYINLDRB R0,[R5,R4]EOR R0,#0XFFSTR R0,[R1]WAIT_TO_UP ;等待按键弹起LDR R3,[R2]AND.W R3,#KEYCMP R3,#0BEQ W AIT_TO_UPB LOOP;延时R0(ms),误差((R0-1)*4+12)/8us;延时较长时,误差小于0.1%DELAY_NMSPUSH {R1} ;2个周期DELAY_NMSLOOPSUB R0,#1MOV R1,#1000DELAY_ONEUSSUB R1,#1NOPNOPNOPCMP R1,#0BNE DELAY_ONEUSCMP R0,#0BNE DELAY_NMSLOOPPOP {R1}BX LR;子程序,将R0低八位右循环移一位,高位不变ByteRor1PUSH {R1,R2,R3}LDR R3,=0XFFFFFF00LSR R1,R0,#1AND R1,#0X0000007FAND R2,R0,#0X01LSL R2,#7ORR R1,R2AND R0,R3ORR R0,R1POP {R1,R2,R3}BX LR;共阴极数码管的码表,使用时先取反DPYTABLE DCB 0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X 71,'\0'END。
(汇编)实现数码管显示年,月,日,时,分,秒,星期,温度,按键可调万年历
;///////////////////////////////////////////;本程序源代码由湖南工程职业技术学院提供.;专业单片机培训,让你学习单片机更容易.;程序员:蒋庆桥;QQ:xxxxxxxxx;本程序用汇编实现数码管显示年,月,日,时,分,秒,星期,温度,按键可调万年历,H_ADJ BIT P3.0 ;时/年调整M_ADJ BIT P3.1 ;分/月调整S_ADJ BIT P1.4 ;秒/日调整DT_SET BIT P1.6 ;时间/日期选择STR BIT P1.5;启动走时T_RST BIT P1.0 ;实时时钟复位线引脚T_CLK BIT P1.1 ;实时时钟时钟线引脚T_IO BIT P1.2 ;实时时钟数据线引脚HH_BIT EQU 40H ;时高位HL_BIT EQU 41H ;时低位MH_BIT EQU 42H ;分高位ML_BIT EQU 43H ;分低位SH_BIT EQU 44H ;秒高位SL_BIT EQU 45H ;秒低位TEMPER_L EQU 46HTEMPER_H EQU 47HYH_BIT EQU 48H ;年高位YL_BIT EQU 49H ;年低位MOH_BIT EQU 4aH ;月高位MOL_BIT EQU 4bH ;月低位DH_BIT EQU 4cH ;日高位DL_BIT EQU 4dH ;日低位SEC EQU 30HMIN EQU 31HHOUR EQU 32HDAY EQU 33HMONTH EQU 34HWEEK EQU 35HYEAR EQU 36HTEMPER equ 37hFLAG1 BIT 20h.0 ;DS18B20存在标志位DQ BIT P1.3A_BIT EQU 55HB_BIT EQU 56HDS1302_ADDR EQU 5EHDS1302_DATA EQU 5FHORG 00HLJMP STARTSTART:MOV SP,#60HMOV TMOD,#11HMOV TH0,#3CHMOV TL0,#0B0HMOV R0,#10SETB EASETB ET0SETB TR0MOV R1,37HMOV YEAR,#13H ;上电预置日期、时间MOV WEEK,#03H ;周1 MONMOV MONTH,#07H ;2011 04 25 12:00:00MOV DAY,#05HMOV HOUR,#23HMOV MIN,#00HMOV SEC,#00HMOV 50H,#0/////////////////////////////////////////////////////////////////////// ////MAIN:LCALL KEY//MAIN2:CALL FENLILCALL INIT_18B20LCALL GET_TEMPERcall CHANGEcall dispcall displayAJMP MAINFENLI:MOV A,YEARMOV B,#10HDIV ABMOV YL_BIT,BMOV YH_BIT,AMOV A,MONTHMOV B,#10HDIV ABMOV MOL_BIT,BMOV MOH_BIT,AMOV A,DAYMOV B,#10HDIV ABMOV DL_BIT,BMOV DH_BIT,AMOV A,HOURMOV B,#10HDIV ABMOV HL_BIT,BMOV HH_BIT,AMOV A,MINMOV B,#10HDIV ABMOV ML_BIT,BMOV MH_BIT,AMOV A,SECMOV B,#10HDIV ABMOV SL_BIT,BMOV SH_BIT,ARETKEY: ;按键子程序JB F0,MAIN10 ;F0=1,开始走时。
用汇编语言实现八段数码管显示
用汇编语言实现八段数码管显示一、实验要求利用实验仪提供的显示电路,动态显示一行数据.二、实验目的1. 了解数码管动态显示的原理。
2. 了解用总线方式控制数码管显示三、实验线路及连线四、实验说明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 。
位选通信号 (0x002H)段码输出 (0x004H)数据总线七段数码管的字型代码表如下表:五、程序框图程序代码OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75h ;ljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ;mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ;mov r2, #00100000b ;Loop:mov dptr, #OUTBITmov a, #0movx @dptr, a ;mov a, @r0mov dptr, #OUTSEGmovx @dptr,amov dptr, #OUTBITmov a, r2movx @dptr, a ;mov r6, #01call Delaymov a, r2 ;rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ;retStart:mov sp, #40hmov Num, #0MLoop:inc Nummov a, Nummov b, amov r0, #LEDBufFillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ;mov @r0,a ;inc r0inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#0DispAgain:call DisplayLED ;djnz DelayT,DispAgain ljmp MLoopend。
单片机数码管动态显示实验报告
单片机数码管动态显示实验报告单片机数码管动态显示实验程序(汇编)单片机数码管动态显示实验程序org 00hajmp headorg 0030hhead:mov sp,#0070hnum equ p0 ;p0口连接数码管reset:mov dptr ,#tabmov r0,#4sh:acall show_tabcall dptr_adddjnz r0,shmov r0 ,#4sjmp resetdptr_add:inc dptrinc dptrinc dptrinc dptrrettab :db0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;;;;;;;;;;;;;;;;;;;;; 函数的功能是用来动态显示dptr上的四个数据 ;;;;;;;;;;;;;;;;;;;;;; show_tab:clr amov r2,#0mov r3,#148mov p2,#238loop:movc a,@a+dptrmov num ,aacall delay_5msinc r2mov a,r2;调用片选函数前注意A的变化acall select_movcjne r2,#4,loopmov r2,#0clr adjnz R3,loopret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;select_mov:;p2的初值238push 0e0hmov a,p2rl amov p2,apop 0e0hretdelay_5ms:mov r6,#5signed_5ms:call delay_1msdjnz r6,signed_5msret篇二:单片机动态数码显示设计实验报告微机原理与接口技术实验报告实验题目:指导老师:班级:计算机科学与技术系姓名:动态数码显示设计2014年 12月3日实验十三动态数码显示设计一、实验目的1.掌握动态数码显示技术的设计方法。
数码管显示数码符号实验报告(含源代码)
微机原理课程设计必做题目设计报告题目数码管显示数码符号学院专业电气工程及其自动化成员杜丽佳指导教师摘要根据题目要求,利用8253、8255等硬件和8086 CPU总线接口,以汇编语言为载体,完成利用中断的数据控制输出的设计,实现将以开关的状态表示的二进制数作为输入,经过数据处理后,最终通过数码管加以显示的功能。
本报告主要完成以下工作:1)简要介绍本设计的前言和要求;2)详细介绍本设计的硬件组成3)详细介绍汇编程序的运行流程;4)介绍步骤和现象。
关键词:数据控制输出数码管显示中断第一章绪论1.1 前言微型计算机原理及接口技术是普通高等教育重要的专业课,是电气类专业的平台课程,具有很强的实践性。
在微机实践的过程中开展必做题,使同学们巩固课本上学到的知识,掌握硬件电路走线的基本方法和规范,软件设计的基本方法和规范,提升同学们的团队精神和动手能力,为把学生培养成为卓越工程师打下良好基础。
《数码管显示数码符号》即为此次微机实践必做题,借助微型计算机实验开发板,通过汇编语言完成用数码管显示通过8255芯片输入的数据的功能。
1.2 题目要求图1 微机系统接口电路七段码显示器采用8255A作为接口,8255A的A端口接八个开关,8255A 的B端口控制数码显示器的阳极(七段码显示器为共阴极接法),利用74LS138作为地址译码器,利用8253定时中断控制。
微机系统接口电路如图1所示。
8253的CNT0和CNT1用来产生方波信号,OUT1连接到8259A中断控制器的IRO2端,通过8259A向CPU请求中断,每一秒中断一次。
在中断服务程序中从A端口输入数据到AL中,如果AL的内容是0EH或0FH,则在数码管上显示“H”(七段码76H),否则将AL的内容加2后输出到数码管上。
(已知8259A中断屏蔽寄存器地址为21H,共阴极显示器的0`F的七段码分别为3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、67H、77H、7CH、39H、2EH、79H、71H、73H。
实验二 数码管显示
实验二数码管显示本实验的目的是掌握数码管的工作原理与使用,实现数码管的静、动态显示。
静态数码管我们先看看什么是数码管,上图就是各种长相各种样子的数码管了,肯定很眼熟了吧。
不管将几位数码管连在一起,数码管的显示原理都是一样的,都是靠点亮内部的发光二极管来发光,下面就来我们讲解一个数码管是如何亮起来的。
数码管内部电路如下图所示,从右图可看出,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。
而它们的公共端又可分为共阳极和共阴极,中间图为共阴极内部原理图,右图为共阳极内部原理图。
上图展出了常用的两种数码管的引脚排列和内部结构。
总所周知,点亮发光二极管就是要给予它足够大的正向压降。
所以点亮数码管其实也就是给它内部相应的发光二极管正向压降。
如上图左(一共a、b、c、d、e、f、g、DP 八段),如果要显示“1”则要点亮b、c 两段LED;显示“A”则点亮a、b、c、e、f、g 这六段LED;我们还知道,既然LED 加载的是正向压降,它的两端电压必然会有高低之分:如果八段LED 电压高的一端为公共端,我们称之为共阳极数码管(如上图中);如果八段LED 电压低的一段为公共端,则称之为共阴极数码管(上图右)。
所以,要点亮共阳极数码管,则要在公共端给予高于非公共端的电平;反之点亮共阴极数码管,则要在非公共端给予较高电平。
对共阴极数码来说,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。
当我们给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮了。
如果想要显示出一个8字,并且把右下角的小数点也点亮的话,可以给8个阳极全部送高电平,如果想让它显示出一个0字,那么我们可以除了给第“g, dp”这两位送低电平外,其余引脚全部都送高电平,这样它就显示出0字了。
键盘扫描显示实验报告
一、实验目的1. 理解键盘扫描的基本原理,掌握键盘扫描的方法。
2. 掌握数码管显示的基本原理,实现键盘扫描信息的实时显示。
3. 熟悉8255并行接口芯片在键盘扫描和数码管显示中的应用。
二、实验原理1. 键盘扫描原理:键盘扫描是指通过硬件电路对键盘按键进行检测,并将按键信息转换为可识别的数字信号的过程。
本实验采用行列式键盘,通过扫描键盘的行线和列线,判断按键是否被按下。
2. 数码管显示原理:数码管是一种用来显示数字和字符的显示器,由多个发光二极管(LED)组成。
本实验采用七段数码管,通过控制各个段(A、B、C、D、E、F、G)的亮灭,显示相应的数字或字符。
3. 8255并行接口芯片:8255是一款通用的并行接口芯片,具有三个8位并行I/O口(PA、PB、PC),可用于键盘扫描和数码管显示的控制。
三、实验设备1. 实验平台:PC机、8255并行接口芯片、行列式键盘、七段数码管、面包板、导线等。
2. 软件环境:汇编语言编程软件、仿真软件等。
四、实验步骤1. 硬件连接:将8255并行接口芯片、行列式键盘、七段数码管连接到实验平台上,按照电路图进行连线。
2. 编写程序:使用汇编语言编写键盘扫描和数码管显示的程序。
(1)初始化8255并行接口芯片:设置PA口为输出端口,PB口为输出端口,PC口为输入端口。
(2)扫描键盘:通过PC口读取键盘的行线状态,判断是否有按键被按下。
若检测到按键被按下,读取对应的列线状态,确定按键的位置。
(3)数码管显示:根据按键的位置,控制数码管的段(A、B、C、D、E、F、G)的亮灭,显示相应的数字。
3. 仿真调试:使用仿真软件对程序进行调试,确保程序能够正确扫描键盘和显示数字。
五、实验结果与分析1. 实验结果:成功实现了键盘扫描和数码管显示的功能。
当按下键盘上的任意按键时,数码管上会显示对应的数字。
2. 分析:(1)键盘扫描部分:通过读取PC口的行线状态,判断是否有按键被按下。
当检测到按键被按下时,读取PB口的列线状态,确定按键的位置。
DS18B20汇编程序(完整版)
DS18B20汇编程序(完整版)DS18B20汇编程序;实验目的:熟悉DS18B20的使用;六位数码管显示温度结果,其中整数部分2位,小数部分4位;每次按下RB0键后进行一次温度转换。
;硬件要求:把DS18B20插在18B20插座上; 拨码开关S10第1位置ON,其他位置OFF; 拨码开关S5、S6全部置ON,其他拨码开关全部置OFF;*****************以下是暂存器的定义*****************************#INCLUDE#DEFINE DQ PORTA,0 ;18B20数据口__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF &_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS _OSC CBLOCK 20HDQ_DELAY1DQ_DELAY2TEMPTEMP1TEMP2 ;存放采样到的温度值TEMP3COUNTCOUNT1ENDCTMR0_VALUE EQU 0AH ;寄存器初值为6,预分频比1:4,中断一次时间为4*(256-6)=1000usDQ_DELAY_VALUE1 EQU 0FAHDQ_DELAY_VALUE2 EQU 4H;**********************以下是程序的开始************************ ORG 00HNOPGOTO MAIN ;入口地址ORG 04HRETFIE ;在中断入口出放置一条中断返回指令,防止干扰产生中断TABLEADDWF PCL,1RETLW 0C0H ;0的编码(公阳极数码管)RETLW 0F9H ;1的编码RETLW 0A4H ;2的编码RETLW 0B0H ;3的编码RETLW 99H ;4的编码RETLW 92H ;5的编码RETLW 082H ;6RETLW 0F8H ;7RETLW 080H ;8RETLW 090H ;9;***************************主程序******************************* MAINCLRF PORTACLRF PORTBBANKSEL TRISACLRF TRISA ;A口所有先设置为输出CLRF TRISDMOVLW 01HMOVWF TRISB ;B0口为输入,其他为输出MOVLW 06HMOVWF ADCON1 ;关闭所有A/D口MOVLW 01HMOVWF OPTION_REG ;分频比1:4,定时器,内部时钟源BCF STATUS,RP0CLRF TEMPCLRF TEMP1CLRF TEMP2 ;清零临时寄存器MOVLW 8HMOVWF COUNTMOVLW 38HMOVWF FSRCLRF INDFINCF FSR,1DECFSZ COUNT,1GOTO $-3;****************************循环处理部分************************;先启动18B20温度转换程序,在判断温度转换是否完成(需750us);未完成则调用显示子程序,直到完成温度转换;完成后读取温度值;送LCD显示LOOPBTFSC PORTB,0 ;判断温度转换按键是否按下GOTO LOOP1 ;否,转显示CALL DELAY ;消抖BTFSC PORTB,0 ;再次判断GOTO LOOP1CALL RESET_18B20 ;调用复位18B20子程序MOVLW 0CCHMOVWF TEMPCALL WRITE_18B20 ;SKIP ROM命令MOVLW 44HMOVWF TEMPCALL WRITE_18B20 ;温度转换命令CLRF STATUSCALL DELAY_750MS ;调用温度转换所需要的750MS延时NOPCALL RESET_18B20MOVLW 0CCHMOVWF TEMPCALL WRITE_18B20 ;SKIP ROM命令MOVLW 0BEHMOVWF TEMPCALL WRITE_18B20 ;读温度命令CALL READ_18B20 ;调用读温度低字节MOVFW TEMPMOVWF TEMP1 ;保存到TEMP1CALL READ_18B20 ;调用读温度高字节MOVFW TEMPMOVWF TEMP2 ;保存到TMEP2CALL RESET_18B20LOOP1CALL TEMP_CHANGE ;调用温度转换程序CALL DISPLAY ;调用LCD显示程序GOTO LOOP ;循环工作;*********************复位DS18B20子程序************************** RESET_18B20;根据DATASHEET介绍,写数据时应遵照如下规定:;主控制器把总线拉低至少480us,;18B20等待15-60us后,把总线拉低做为返回给控制器的应答信号BANKSEL TRISABCF TRISA,0BCF STATUS,RP0BCF DQMOVLW 0A0HMOVWF COUNT ;160USDECFSZ COUNT,1GOTO $-1 ;拉低480usBSF DQ ;释放总线MOVLW 14HMOVWF COUNTDECFSZ COUNT,1GOTO $-1 ;等待60usBANKSEL TRISABSF TRISA,0 ;DQ设置为输入BCF STATUS,RP0BTFSC DQ ;数据线是否为低GOTO RESET_18B20 ;否则继续复位MOVLW 4HMOVWF COUNTDECFSZ COUNT,1 ;延时一段时间后再次判断GOTO $-1BTFSC DQGOTO RESET_18B20MOVLW 4BHMOVWF COUNTDECFSZ COUNT,1GOTO $-1BANKSEL TRISABCF TRISA,0 ;DQ设置为输出BCF STATUS,RP0RETURN;*********************写DS18B20子程序**************************** WRITE_18B20;根据DATASHEET介绍,写数据时应遵照如下规定:;写数据0时,主控制器把总线拉低至少60us;写数据1时,主控制器把总线拉低,但必须在15us内释放MOVLW 8HMOVWF COUNT ;8位数据BANKSEL TRISABCF TRISA,0BCF STATUS,RP0BCF STATUS,CWRITE_18B20_1BSF DQ ;先保持DQ为高MOVLW 5HMOVWF COUNT1BCF DQ ;拉低DQ15usDECFSZ COUNT1,1GOTO $-1RRF TEMP,1BTFSS STATUS,C ;判断写的数据为0还是1GOTO WRITE_0BSF DQ ;为1,立即拉高数据线GOTO WRITE_ENDWRITE_0BCF DQ ;继续保持数据线为低WRITE_ENDMOVLW 0FHMOVWF COUNT1 ;保持45msDECFSZ COUNT1,1GOTO $-1BSF DQ ;释放总线DECFSZ COUNT,1 ;是否写完8位数据GOTO WRITE_18B20_1RETURN;**********************读DS18B20子程序**************************** READ_18B20;根据DATASHEET介绍,读数据时应遵照如下规定:;读数据0时,主控制器把总线拉低后,18B20再把总线拉低60us ;读数据1时,主控制器把总线拉低后,保持总线状态不变;主控制器在数据线拉低后15us内读区数据线上的状态。
实验3 数码管显示实验
74LVCH273 ED7~ED0
数据总线
0x200070000
nCS SEG2 段数据选通 D0 D1 D2 D3 D4 D5 D6 D7 CLK Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 CLR
PA0
a f g b e a b c d e f g h
第 1位 数码管 c h
第 6位 数码管
实验程序流程框图
裸机系统基本程序运行环境设置参数及程序
复位异常程序:裸机初始化 设置静态参数 程序从0X0开始 建立异常向量表 预存存储器参数 关闭看门狗定时器
主应用程序
获取显示码表起始地址
显示值=F?
显示值=0?
选通6个数码管位选择
显示值-1 向数码管输出显示码
关闭所有中断
设置系统时钟
延时 将存储器参数写入处 理器特殊功能寄存器 区内的存储器参数区
6位共阳数码管动态循环显示电路原理图
6个数码管的段数据和位数据分别由2个8D锁存器74LVCH273加以驱动。
段显示码数据的最低位到最高位分别对应数码管的a段到h段。
CPU首先向口地址0x20006000输0007000输出位数据(仅使需要显示当前段数据的数码管被选通)。
ldr r0,=0x20006000 1、向段选通信号口地址0x20006000输出一个显示码: ldr r1,=0xC0 ;0的显示码 str r1,[r0]
S3C2440数据线
接数码管1 3.3V 接数码管6 3.3V nCS SEG2 (对应口地址 =0x20007000) (8D锁存器) 注:”0”电平 三极管导通 A F E
实验说明
L1 ldr r0,=0x20007000 ldr r1,=0x00 str r1,[r0] ldr r0,= 0x20006000 add r2,r2,#1 add r1,r4,r2 ldrb r1,[r1] str r1,[r0] bl Delay b LOOP ; 数码管6个位选信号锁存器地址nCS SEG2 ; 把数码管全部选定 ; 把6个数码管全部选定 ; 数码管8位段数据锁存器地址nCS SEG1 ; r2加1,即完成从0到F的显示 ; r1记录当前数码管数据所在的地址 ; 把数码管所要显示的值加载到r1中 ; 显示数码管的值 ; 延时 ; 跳转到LOOP
实验四 数码管的动态显示实验
实验四数码管的动态显示实验班级通信1102 姓名谢剑辉学号20110803223 指导老师袁文澹一、实验目的熟悉掌握数码管动态显示的基本方法;根据已知电路和设计要求在实验板上实现数码管动态显示。
根据已知电路和设计要求在PROTEUS平台仿真实现控制系统。
二、实验内容1、在STC89C52实验平台的4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容。
2、思考:如何实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣。
三、实验原理实验要求“4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容”。
动态扫描可以实现要求。
简单地说,动态扫描就是选通一位,送一位数据。
原理图中的P10~P13是位选信号,即选择哪个数码管显示数字;P00~P07是段码,即要显示的数字。
可以通过依次选通一位7段数码管并通过P0端口送出显示数据。
由于人眼的视觉残留原理,如果这种依次唯一选通每一位7段数码管的动作在0.1s内完成,就会造成多位数码管同时点亮显示各自数字的假象。
本实验使用中断,实现每2s更新一次数字。
四、实验方法与步骤设计思路和方法:1、根据电路图,分析数码管动态显示的设计思路,使用中断实现每2秒更新一次数字的设计思路,以及实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣的设计思路。
(1)数码管动态显示的原理如“实验原理”里所述,不赘述;(2)使用中断实现每2s更新一次数字的设计思路:本次实验使用Timer0中断,由于其定时时间最大为65536us,不能实现2s的长延时,那么可以使用多次中断来实现,并且在中断到来时,不断地死循环显示数字,即根据动态显示原理“选通一位,来一位数据”。
由于最大的数字为9,则(x%10),(x+1)%10,(x+2)%10,(x+3)%10分别是千位,百位,十位,个位上的数字。
微机原理与接口实验
微机原理与接口实验实验目的:通过实验,掌握微机系统原理和接口的基本知识,能够正确使用各种接口设备进行输入输出操作。
实验器材:8086微机系统、键盘、数码管、LED灯、示波器等。
实验一:键盘输入实验实验内容:1.连接键盘到8086微机系统。
2.编写汇编程序,实现用户输入字符,并在数码管上显示用户输入的字符。
3.将程序加载到存储器中,并运行程序,进行输入测试。
实验步骤:1.将键盘接口与8086微机系统相连接。
键盘的数据引脚接到8086微机系统的8位数据总线,键盘的控制引脚接到8086微机系统的地址总线和控制总线上。
2.编写汇编程序,初始化键盘接口并循环接收键盘输入的字符。
将键盘输入的字符加载到寄存器中,并将其数字值转换为对应的ASCII码值,再将其显示在数码管上。
3.将汇编程序加载到存储器中,并运行程序进行测试。
实验结果:通过实验,可以实现键盘输入功能,并能够在数码管上显示用户输入的字符。
实验二:LED灯输出实验实验内容:1.连接LED灯到8086微机系统。
2.编写汇编程序,实现控制LED灯的亮灭。
3.将程序加载到存储器中,并运行程序,观察LED灯的亮灭情况。
实验步骤:1.将LED灯接口与8086微机系统相连接。
LED灯的引脚接到8086微机系统的8位数据总线上。
2.编写汇编程序,初始化LED灯接口并循环控制LED灯的亮灭状态。
3.将汇编程序加载到存储器中,并运行程序观察LED灯的亮灭情况。
实验结果:通过实验,可以实现LED灯的亮灭控制,根据程序中的指令可以控制LED灯的闪烁频率和顺序。
实验三:外设输入输出实验实验内容:1.连接外设设备(如温湿度传感器等)到8086微机系统。
2.编写汇编程序,读取外设设备的输入信息,并控制外设设备的输出。
3.将程序加载到存储器中,并运行程序,观察外设设备的输入输出情况。
实验步骤:1.将外设设备接口与8086微机系统相连接。
外设设备的输入引脚接到8086微机系统的数据总线上,外设设备的输出引脚接到8086微机系统的控制总线上。
微机原理数码显示hello
实验二数码显示一、实验目的了解LED数码管动态显示的工作原理及编程方法。
二、实验内容编制程序,使数码管显示“HELLO”字样。
三、实验程序框图四、实验过程1、启动运行DICE-8086K软件,屏幕显示DICE-8086K软件的工作窗口,底边状态栏由“下位机没有连接….”变成“连接上下位机”,说明联机成功,否则会弹出对话框提示:“下位机没有连接…”。
单击工具栏上的“重新连接”按钮可以联机,一定要保证上下位机联机成功。
将试验箱上的通讯开关打到最下端86/88档。
2.进入DICE-8086K软件后,默认会打开一个编辑窗口Editor,此时可在此编辑、输入源程序。
输入的源程序如下:CODE SEGMENTASSUME CS:CODESTART: JMP TODA TA DB 89H,86H,0C7H,0C7H,0C0HTO:LEA SI,DA TAMOV BL,11101111BNEXT: MOV DX,0FF20HMOV AL,BLOUT DX,ALROR BL,1CMP AL,10111111BJZ TOMOV DX,0FF21HMOV AL,[SI]OUT DX,ALINC SICALL DELAYJMP NEXTDELAY PROCMOV CL,0FFHX1:DEC CLJNZ X1DELAY ENDPHLTCODE ENDSEND START保存编写好的程序,保存的文件名后缀为.ASM ,保存后,单击工具栏上的编译装载图标,几秒钟后会弹出“编译成功”对话框,单击“OK”,再等几秒钟会弹出“装载成功”对话框,单击“OK”即编译装载完毕。
3、观察试验箱上的数码管显示是否为HELLO,若不是则需检查程序是否出错。
五、实验总结1、学会了数码管的控制方法,以及DICE-8086K软件的使用方式。
2、学会了延时汇编程序的一般书写以及调用。
汇编编写三位数码管显示程序
C1 30pfC2 30pf X1CRYSTALXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427 U1AT89C51PROGRAM=三个数码管.HEX22UF22UFR11k R2100R3100R4100R5100R6100R7100R8100R9100Q1PNPQ2PNP R101KR111KQ3PNPR121k(原理仿真图)三位数码管显示000~255汇编源程序说明(数码管是轮流工作的,个位显示时十位与百位数码管关闭,以此类推只要轮流的时间足够快,人在视觉暂留的作用下,就会感觉同时显示是三位数本程序延时10MS。
“;”后面为程序注释不属于程序)ORG 00HM EQU P2.0N EQU P2.1Q EQU P2.2LJMP STARTORG 30HSTART: MOV DPTR,#TABLECLR ALOOP1: ACALL SCANINC R0;r0作为计数器CJNE R0,#255,LOOP1未计数到255循环JMP START———————————scan为显示程序———————————————SCAN: MOV R7,#33;循环次数MOV A,R0MOV B,#100DIV ABMOV R1,A;百位数字MOV R2,BMOV A,R2MOV B,#10DIV ABMOV R3,A;十位数字LOOP: MOV R4,B;个位数字MOV A,R4ACALL CHANGE;取码表CLR M;清零个位计数器有效ACALL DELAY10ms;延时10ms SETB M;置位MOV A,R3ACALL CHANGECLR NACALL DELAY10msSETB NMOV A,R1ACALL CHANGECLR QACALL DELAY10msSETB QDJNZ R7,LOOP; 33*30`约为1sRETCHANGE :MOVC A,@A+DPTRMOV P0,ARETDELAY10ms:MOV R5,#20D1: MOV R6,#248DJNZ R6,$DJNZ R5,D1RETTABLE: DB 0C0H,0F9H,0A4H,0B0H ;(数码表)DB 99H,92H,82H,0F8HDB 80H,90H,88H,83HDB 0C6H,0A1H,86H,8EHEND。
工作报告之数码管显示实验报告
数码管显示实验报告【篇一:嵌入式实验报告数码管显示实验】实验报告课程名称实验仪器实验名称系别专业班级/学号学生姓名实验日期成绩指导教师嵌入式系统编程实践清华同方辰源嵌入式系统实验箱实验四:数码管显示实验 __计算机学院_ _ 2013年10月11日___________________实验四:数码管显示实验一、实验问题回答(1)如何设置功能3,4中的循环速度?答:利用系统systick handler中断,控制循环速度void systick_handler (void){event = 1;}(2)若是想实现类似实验(三)通过键盘动态控制循环速度,考虑一下应该如何设计?答: systickperiodset(sysctlclockget() / x)//设置x的大小就可以控制循环的速度。
void reset_counter_speed(int x){systickintdisable();systickdisable();systickperiodset(sysctlclockget() / x);// 设置x,控制计数频率,值与频率成正比systickenable();systickintenable();},达到预期的效果。
二、实验目的和效果(效果即是否达到实验目的,达到的程度如何)学习、了解和掌握数码管工作原理和使用方法实验结果及检查(1)默认在在oled屏幕上分行显示自己的学号、姓名、项目序号、时间,如“2010011001”、“zhangsan”、“work4”、“2012-11-”(2)首先在屏幕上显示四个功能选单,通过键盘a-f键选择不同功能,选择后屏幕显示相关功能提示,接受键盘输入的数字键0-9并在数码管上显示。
如:开始显示:“please choose the function:” “a: ?” “b: ?” “c: ?” “d: ?”按下“a”键后,显示”now you choose function a”(3)按下键盘后,根据不同功能在数码管上显示按键字符。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数码管显示
一、实验名称:数码管显示班号
二、实验目的:在开发板上八位数码管上显示班号(10010542)
三、实验仪器与设备:
1、联想Z560(ITH)笔记本电脑一台(含KEIL4及STC_ISP)
2、铁牛单片机开发板一块
3、USB转串口线一条
4、USB电源线一条
四、实验原理:
八段数码管是共阴的,给对应段赋值“1”,就能产生相应的数字。
利用位选可以控制显示数的数码管,再给对应位相应的段选信号就可以产生想要的数字,加上人的视觉暂留就可以产生同时亮的现象。
以下为原程序。
ORG 0000H
MAIN: MOV R1,#00H
MOV DPTR,#TAB
DIS:MOV A,R1
MOV P1,R1
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY
INC R1
CJNE R1,#08H,DIS
SJMP MAIN
RET
TAB: DB 5BH,66H,6DH,3FH,06H,3FH,3FH,06H
RET
DELAY:MOV R6,#1
D1: MOV R7,#248
D2: NOP
NOP
DJNZ R7, D2
DJNZ R6, D1
RET
END
五、实验步骤:
1、编写程序,编译并生成HEX文件
2、接上USB电源线及USB转串口线,利用STC_ISP将HEX文件烧写到单片机中
六、实验结果:
七、实验体会
理论必须实践相结合,书本要与配合实验才能达到最好的效果。
学好单片机对生活和学习都会有不少的帮助
八、教师评语、成绩及签字。