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

📄 lab3.lst

📁 PICC 16X Code for study and learning
💻 LST
字号:
     1: 

     2: /****************************************************************

     3: *                       Hi-Tech workshop exercise Lab3                                          *

     4: *****************************************************************

     5: *                                                                                                                               *

     6: *   Files required:                                                                                             *

     7: *                                                                                                                               *               

     8: *                   lab3.c                                                                              *

     9: *                                       MID_LCD.c                                                                       *

    10: *                   cnfig877a.h (Set the Configuration Word)    *

    11: *                                                                                                                               *

    12: *                   pic.h        (Hi-Tech file)                                 *

    13: *                                                                                                                               *

    14: *****************************************************************

    15: *                                                                                                                               *

    16: *   Notes:                                                                                                              *

    17: *                                                                                                                               *

    18: *   Device Fosc -> 16.00MHz (Clock supplied by target)                  *

    19: *                                                                                                                               *       

    20: *****************************************************************/

    21: 

    22: #include <pic.h>                                // processor if/def file

    23: #include "cnfig877a.h"

    24: #include "mid_lcd.h"

    25: 

    26: //**********************************

    27: //* Function Prototype Declaration

    28: //**********************************

    29: void Init_IO(void);

    30: void Init_Adc( void );

    31: void A2D( unsigned char );

    32: void LCD_ItoA(unsigned int);

    33: unsigned char Set_BCD_ASCII(unsigned char);

    34: 

    35: // ================================================================

    36: // **** Establish PIC16F877A Configuration Word

    37: // **** == HS Oscillator Mode

    38: // **** == Brown-Out Detect Enabled

    39: // **** == Watch-Dog Timer Off

    40: // **** == Code Protect Off

    41: // **** == Low Voltage Programming Off

    42: // **** == ICD2 Debug Mode On

    43: 

    44: __CONFIG  ( HS_OSC & BODEN_ON & WDT_OFF & CP_OFF & LVP_OFF & DEBUG_ON ); 

    45: 

    46: // =================================================================

    47: 

    48: 

    49: const char LCD_Msg1[]=" A/D Result:    "; 

    50: const char LCD_Msg2[]="  MSB:   LSB:   "; 

    51: 

    52: unsigned int AD_Temp;

    53: bit DS_Zero_Flag;

    54: 

    55: union   {

    56:                 int AD_10bit;

    57:                 struct  {

    58:                                 char AD_LSB;

    59:                                 char AD_MSB;

    60:                                 }AD_Byte;

    61:                 }AD_Int;

    62: 

    63: 

    64: /*****************************

    65:     INITIALIZE I/O PORT

    66: *****************************/

    67: 

    68: void Init_IO(void)

    69: {

    70:         ADCON1=0b00000110;              // Disable A/D Function

    71:         TRISD=0x00;                             // Set PortD for Output

    72:         PORTD=0x80;                             // Initila LED display = 0x80

    73:         TRISA4=1;                               // Set SW2 for input

    74:         TRISE1=1;                               // Set SW6 for Input

    75: }

    76: 

    77: 

    78: /*****************************************

    79:     Initialize A/D & Comparator Module

    80: ******************************************/

    81: 

    82: void Init_Adc( void )

    83: {

    84:         CMCON=0b000000111;              // Analog comparator disable

    85:         ADCON1=0b00001110;              // AN0 is A/D input

    86:         ADFM=1;                                 // Right justified

    87:         ADCON0=0b10000001;              // Selext CH0 , A/D on

    88: }    

    89:                                        

    90: /***********************************

    91:         Convert A/D Channel

    92: ************************************/

    93: 

    94: void A2D( unsigned char channel )

    95: {

    96:         unsigned char temp;                             // Temp storage

    97: 

    98:         temp = channel << 3;                    // Shift channel value three bits left

    99:         ADCON0 &= 0b11000111;                   // Clear channel select bits in ADCON0

   100:         ADCON0 |= temp;                                 // Logically OR shifted channel value into place in ADCON0

   101:  

   102:         ADGO = 1;                                               // Initiate conversion on selected channel

   103:         while (ADGO) ;                                  // Poll ADGO bit until it clears, indicating conv. done

   104:         AD_Int.AD_Byte.AD_MSB=ADRESH;

   105:         AD_Int.AD_Byte.AD_LSB=ADRESL;

   106: } 

   107: 

   108: //***************************************

   109: //*             Program Main ( )                *

   110: //***************************************

   111: void main(void)

   112: {

   113:         Init_IO();

   114:         Init_Adc();

   115:         OpenLCD();

   116:         LCD_Set_Cursor(0,0);

   117:         putrsLCD(LCD_Msg1);

   118:         LCD_Set_Cursor(0,1);

   119:         putrsLCD(LCD_Msg2);

   120: 

   121:         while(1)

   122:         {

   123:                 A2D(0x00);                                              // Get 10-bit A/D result from CH0

   124:                 LCD_Set_Cursor(12,0);

   125:                 LCD_ItoA(AD_Int.AD_10bit);

   126:                 LCD_Set_Cursor(6,1);

   127:                 puthexLCD(AD_Int.AD_Byte.AD_MSB);

   128:                 LCD_Set_Cursor(13,1);

   129:                 puthexLCD(AD_Int.AD_Byte.AD_LSB);

   130:         }

   131:         

   132: }

   133: 

   134: void LCD_ItoA(unsigned int AD_Data)

   135: {

   136:                 AD_Temp=AD_Data;

   137:             DS_Zero_Flag=1;

   138: 

   139:                 putcLCD(Set_BCD_ASCII(AD_Data/1000));           // 陪ボ

⌨️ 快捷键说明

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