洪嵐峰 發表於 2023-4-25 07:01:56

PIC16F877A

製作電池點焊機的零件清單:

PIC16F877A 微控制器
電源模組(5V 和 12V)
MOSFET(用於控制點焊電流)
16x2 字元 LCD 顯示屏
4x4 矩陣鍵盤
繼電器模組
1k歐姆電阻
母頭排針、公頭排針、接線板等


點焊機程式碼(C 語言):


#include <16f877a.h>
#include <lcd.h>
#include <stdlib.h>
#include <string.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

#define KEYPAD_PORT    PORTB
#define KEYPAD_C1      PIN_B0
#define KEYPAD_C2      PIN_B1
#define KEYPAD_C3      PIN_B2
#define KEYPAD_C4      PIN_B3
#define KEYPAD_R1      PIN_B4
#define KEYPAD_R2      PIN_B5
#define KEYPAD_R3      PIN_B6
#define KEYPAD_R4      PIN_B7
#define RELAY          PIN_C0
#define MOSFET         PIN_C1

int count = 0;

void main()
{
   lcd_init();
   output_low(RELAY);
   output_low(MOSFET);

   while(TRUE)
   {
      char key = read_keypad();

      if(key != 0)
      {
         if(key == '*')
         {
            lcd_putc('\f');
            count = 0;
            output_low(RELAY);
         }
         else if(key == '#')
         {
            if(count > 0)
            {
               output_high(RELAY);
               delay_ms(500);
               output_high(MOSFET);
               delay_ms(200);
               output_low(MOSFET);
               output_low(RELAY);
               lcd_putc('\f');
               printf(lcd_putc,"Complete %3u",count);
               count = 0;
            }
         }
         else
         {
            count++;
            printf(lcd_putc,"%c",key);
         }

         delay_ms(200);
      }
   }
}

char read_keypad()
{
   output_low(KEYPAD_R1);
   output_high(KEYPAD_R2);
   output_high(KEYPAD_R3);
   output_high(KEYPAD_R4);

   if(input(KEYPAD_C1)) { delay_ms(20); if(input(KEYPAD_C1)) return '1'; }
   if(input(KEYPAD_C2)) { delay_ms(20); if(input(KEYPAD_C2)) return '2'; }
   if(input(KEYPAD_C3)) { delay_ms(20); if(input(KEYPAD_C3)) return '3'; }
   if(input(KEYPAD_C4)) { delay_ms(20); if(input(KEYPAD_C4)) return 'A'; }

   output_high(KEYPAD_R1);
   output_low(KEYPAD_R2);
   output_high(KEYPAD_R3);
   output_high(KEYPAD_R4);

   if(input(KEYPAD_C1)) { delay_ms(20); if(input(KEYPAD_C1)) return '4'; }
   if(input(KEYPAD_C2)) { delay_ms(20); if(input(KEYPAD_C2)) return '5'; }
   if(input(KEYPAD_C3)) { delay_ms(20); if(input(KEYPAD_C3)) return '6'; }
   if(input(KEYPAD_C4)) { delay_ms(20); if(input(KEYPAD_C4)) return 'B'; }

output_high(KEYPAD_R1);
output_high(KEYPAD_R2);
output_low(KEYPAD_R3);
output_high(KEYPAD_R4);

if(input(KEYPAD_C1)) { delay_ms(20); if(input(KEYPAD_C1)) return '7'; }
if(input(KEYPAD_C2)) { delay_ms(20); if(input(KEYPAD_C2)) return '8'; }
if(input(KEYPAD_C3)) { delay_ms(20); if(input(KEYPAD_C3)) return '9'; }
if(input(KEYPAD_C4)) { delay_ms(20); if(input(KEYPAD_C4)) return 'C'; }

output_high(KEYPAD_R1);
output_high(KEYPAD_R2);
output_high(KEYPAD_R3);
output_low(KEYPAD_R4);

if(input(KEYPAD_C1)) { delay_ms(20); if(input(KEYPAD_C1)) return '*'; }
if(input(KEYPAD_C2)) { delay_ms(20); if(input(KEYPAD_C2)) return '0'; }
if(input(KEYPAD_C3)) { delay_ms(20); if(input(KEYPAD_C3)) return '#'; }
if(input(KEYPAD_C4)) { delay_ms(20); if(input(KEYPAD_C4)) return 'D'; }

return 0;
}



這個程式碼包含了使用矩陣鍵盤輸入點焊次數,以及控制 MOSFET 和繼電器來控制點焊機的運作。

當使用者輸入次數後,按下 '#' 按鈕來開始點焊,點焊完成後顯示完成次數,然後重置次數和顯示器。

如果要停止運行,按下 '*' 按鈕即可。
頁: [1]
查看完整版本: PIC16F877A