⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.fmt

📁 FPGA 基于PICOBLAZE内核的LCD显示程序,完整,XILINX
💻 FMT
📖 第 1 页 / 共 3 页
字号:
                    ; KCPSM3 Program - Control and calculation for Frequency Generator design using the
                    ;                 Spartan-3E Starter Kit.
                    ;
                    ; Interfaces with the rotary encoder and LCD display to enable a frequency to be set.
                    ; Converts the BCD frequency value into a binary integer and then performs the high
                    ; precision calculation necessary to derive the control numbers required by the high
                    ; performance Direct Digital Synthesis (DDS) circuit implemented in hardware.
                    ;
                    ; LEDs are connected and used as edit mode indicators.
                    ;
                    ; Substantial comments are included in line with the code below and should be used
                    ; in conjunction with the documentation provided with the complete reference design.
                    ;
                    ;
                    ;
                    ; Ken Chapman - Xilinx Ltd
                    ;
                    ; Version v1.00 - 13th July 2006
                    ;
                    ;**************************************************************************************
                    ;Port definitions
                    ;**************************************************************************************
                    ;
                    ;
                    ;LCD interface ports
                    ;
                    ;The master enable signal is not used by the LCD display itself
                    ;but may be required to confirm that LCD communication is active.
                    ;This is required on the Spartan-3E Starter Kit if the StrataFLASH
                    ;is used because it shares the same data pins and conflicts must be avoided.
                    ;
                    CONSTANT LCD_output_port, 40        ;   LCD character module output data and control
                    CONSTANT LCD_E, 01                  ;   active High Enable        E - bit0
                    CONSTANT LCD_RW, 02                 ;   Read=1 Write=0           RW - bit1
                    CONSTANT LCD_RS, 04                 ;   Instruction=0 Data=1     RS - bit2
                    ;CONSTANT LCD_drive, 08              ;   Master enable (active High) - bit3
                    CONSTANT LCD_DB4, 10                ;   4-bit              Data DB4 - bit4
                    CONSTANT LCD_DB5, 20                ;   interface          Data DB5 - bit5
                    CONSTANT LCD_DB6, 40                ;                      Data DB6 - bit6
                    CONSTANT LCD_DB7, 80                ;                      Data DB7 - bit7
                    ;
                    ;
                    CONSTANT LCD_input_port, 01         ;    LCD character module input data
                    CONSTANT LCD_read_DB4, 10           ;    4-bit           Data DB4 - bit4
                    CONSTANT LCD_read_DB5, 20           ;    interface       Data DB5 - bit5
                    CONSTANT LCD_read_DB6, 40           ;                    Data DB6 - bit6
                    CONSTANT LCD_read_DB7, 80           ;                    Data DB7 - bit7
                    ;
                    ;
                    ;
                    ;Control of frequency selection values
                    ;
                    CONSTANT cursor_position, 10        ; Pointer to edit position on LCD
                    ;
                    ; ************************
                    ;
                    ;Constant to define a software delay of 1us. This must be adjusted to reflect the
                    ;clock applied to KCPSM3. Every instruction executes in 2 clock cycles making the
                    ;calculation highly predictable. The '6' in the following equation even allows for
                    ;'CALL delay_1us' instruction in the initiating code.
                    ;
                    ; delay_1us_constant =  (clock_rate - 6)/4       Where 'clock_rate' is in MHz
                    ;
                    ;Example: For a 50MHz clock the constant value is (50-6)/4 = 11  (0B Hex).
                    ;For clock rates below 10MHz the value of 1 must be used and the operation will
                    ;become lower than intended.
                    ;
                    CONSTANT delay_1us_constant, 0B
                    ;
                    ;
                    ;
                    ;ASCII table
                    ;
                    CONSTANT character_a, 61
                    CONSTANT character_b, 62
                    CONSTANT character_c, 63
                    CONSTANT character_d, 64
                    CONSTANT character_e, 65
                    CONSTANT character_f, 66
                    CONSTANT character_g, 67
                    CONSTANT character_h, 68
                    CONSTANT character_i, 69
                    CONSTANT character_j, 6A
                    CONSTANT character_k, 6B
                    CONSTANT character_l, 6C
                    CONSTANT character_m, 6D
                    CONSTANT character_n, 6E
                    CONSTANT character_o, 6F
                    CONSTANT character_p, 70
                    CONSTANT character_q, 71
                    CONSTANT character_r, 72
                    CONSTANT character_s, 73
                    CONSTANT character_t, 74
                    CONSTANT character_u, 75
                    CONSTANT character_v, 76
                    CONSTANT character_w, 77
                    CONSTANT character_x, 78
                    CONSTANT character_y, 79
                    CONSTANT character_z, 7A
                    CONSTANT character_A, 41
                    CONSTANT character_B, 42
                    CONSTANT character_C, 43
                    CONSTANT character_D, 44
                    CONSTANT character_E, 45
                    CONSTANT character_F, 46
                    CONSTANT character_G, 47
                    CONSTANT character_H, 48
                    CONSTANT character_I, 49
                    CONSTANT character_J, 4A
                    CONSTANT character_K, 4B
                    CONSTANT character_L, 4C
                    CONSTANT character_M, 4D
                    CONSTANT character_N, 4E
                    CONSTANT character_O, 4F
                    CONSTANT character_P, 50
                    CONSTANT character_Q, 51
                    CONSTANT character_R, 52
                    CONSTANT character_S, 53
                    CONSTANT character_T, 54
                    CONSTANT character_U, 55
                    CONSTANT character_V, 56
                    CONSTANT character_W, 57
                    CONSTANT character_X, 58
                    CONSTANT character_Y, 59
                    CONSTANT character_Z, 5A
                    CONSTANT character_0, 30
                    CONSTANT character_1, 31
                    CONSTANT character_2, 32
                    CONSTANT character_3, 33
                    CONSTANT character_4, 34
                    CONSTANT character_5, 35
                    CONSTANT character_6, 36
                    CONSTANT character_7, 37
                    CONSTANT character_8, 38
                    CONSTANT character_9, 39
                    CONSTANT character_colon, 3A
                    CONSTANT character_stop, 2E
                    CONSTANT character_semi_colon, 3B
                    CONSTANT character_minus, 2D
                    CONSTANT character_divide, 2F       ;'/'
                    CONSTANT character_plus, 2B
                    CONSTANT character_comma, 2C
                    CONSTANT character_less_than, 3C
                    CONSTANT character_greater_than, 3E
                    CONSTANT character_equals, 3D
                    CONSTANT character_space, 20
                    CONSTANT character_CR, 0D           ;carriage return
                    CONSTANT character_question, 3F     ;'?'
                    CONSTANT character_dollar, 24
                    CONSTANT character_exclaim, 21      ;'!'
                    CONSTANT character_BS, 08           ;Back Space command character
                    ;
                    ;
                    ;
                    ;**************************************************************************************
                    ;Initialise the system
                    ;**************************************************************************************
                    ;
        cold_start: CALL LCD_reset                      ;initialise LCD display
                    ;
                    ;Write 'Frequency Generator' to LCD display and display for 4 seconds
                    ;
                    LOAD s5, 10                         ;Line 1 position 0
                    CALL LCD_cursor
                    CALL disp_Frequency
                    LOAD s5, 22                         ;Line 2 position 2
                    CALL LCD_cursor
                    CALL disp_Generator
                    CALL delay_1s                       ;wait 4 seconds
                    CALL delay_1s
                    CALL delay_1s
                    CALL delay_1s
                    CALL LCD_clear                      ;clear screen
                    ;
                    ;
                    ;
                    CALL delay_1ms
                    ;
                    ;**************************************************************************************
                    ; Main program
                    ;**************************************************************************************
                    ;
                    ; The main program is centred on the task of editing the frequency. It waits until the
                    ; rotary control is used and then makes the appropriate changes. If the actual digit
                    ; digit value is changed then the calculation to drive the DDS is performed each time.
                    ;
                    ; The start state is that of allowing the edit cursor position to be moved. Rotary
                    ; inputs are detected by the interrupt service routine and set a flag bit which the
                    ; main program then uses to adjust the cursor position and pointer to the corresponding
                    ; BCD digit in memory.
                    ;
                    ; A press of the rotary control is detected by polling and used to change to the digit
                    ; editing mode.
                    ;
                    ;
                    ;**************************************************************************************
                    ; Display frequency on top line of the LCD and DDS data on the lower line
                    ;**************************************************************************************
                    ;
                    ; The BCD value should be stored in scratch pad memory in 9 ascending locations
                    ; called BCD_digit0 to BCD_digit8.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -