- UID
- 373967
- 帖子
- 8867
- 主題
- 2609
- 精華
- 0
- 積分
- 1000
- 楓幣
- 0
- 威望
- 977
- 存款
- 34822
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 70
- 在線時間
- 455 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2024-11-21
|
製作含勾錶的三用電表,你所需要的零件包括:
PIC16F877A 微控制器
AC/DC 交直流電表模組
16x2 字元液晶顯示器模組
4 顆按鈕開關
2 個 10K 歐姆電位器
電容:10uF、22pF
晶振:20MHz
電阻:1K、10K、220K、470K
以下是程式碼,使用 CCS C 編譯器:
#include <16F877A.h>
#include <stdlib.h>
#include <lcd.h>
#use delay(crystal=20000000)
// AC/DC 交直流電表模組連結腳位
#bit AC_DC = 0x08.0
#bit AC_DC_SEL = 0x08.1
#bit MEASURE = 0x08.2
// 顯示器模組連結腳位
#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_D1
#define LCD_E_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
// 10K 歐姆電位器連結腳位
#define POT1 PIN_A0
#define POT2 PIN_A1
// 按鈕開關連結腳位
#define BUTTON1 PIN_B0
#define BUTTON2 PIN_B1
#define BUTTON3 PIN_B2
#define BUTTON4 PIN_B3
// 電容連結腳位
#define CAPACITOR PIN_C0
float voltage;
char text[16];
void main()
{
lcd_init();
lcd_putc("3 in 1 Multimeter");
delay_ms(1000);
lcd_putc("\f");
while(1)
{
// 顯示交直流切換選項
lcd_gotoxy(1, 1);
lcd_putc("AC/DC:");
if(AC_DC_SEL == 0)
{
lcd_putc("DC");
}
else
{
lcd_putc("AC");
}
// 顯示電壓值
if(MEASURE == 1)
{
if(AC_DC == 1)
{
// 測量交流電壓
voltage = (float)analog(read_adc()) * 0.0196;
}
else
{
// 測量直流電壓
voltage = (float)analog(read_adc()) * 0.0244;
}
// 顯示電壓值
lcd_gotoxy(1, 2);
sprintf(text, "Voltage:%.2fV", voltage);
lcd_putc(text);
}
// 設定交直流切換按鈕
if(input(BUTTON1) == 0
{
delay_ms(20);
if(input(BUTTON1) == 0)
{
AC_DC_SEL = !AC_DC_SEL;
delay_ms(50);
}
}
// 設定測量按鈕
if(input(BUTTON2) == 0)
{
delay_ms(20);
if(input(BUTTON2) == 0)
{
MEASURE = !MEASURE;
delay_ms(50);
}
}
// 設定亮度調整
if(input(BUTTON3) == 0)
{
delay_ms(20);
if(input(BUTTON3) == 0)
{
// 顯示亮度調整提示
lcd_putc("\f");
lcd_gotoxy(1, 1);
lcd_putc("Brightness:");
lcd_gotoxy(1, 2);
lcd_putc("Pot 1: Pot 2:");
while(input(BUTTON4) == 1)
{
// 顯示電位器值
lcd_gotoxy(10, 2);
sprintf(text, "%04lu", analog_read(POT1));
lcd_putc(text);
lcd_gotoxy(17, 2);
sprintf(text, "%04lu", analog_read(POT2));
lcd_putc(text);
// 設定亮度
lcd_backlight(1);
delay_ms(analog_read(POT1) / 4);
lcd_backlight(0);
delay_ms(analog_read(POT2) / 4);
}
// 顯示回主畫面
lcd_putc("\f");
}
}
}
}
程式碼中使用 `lcd.h` 標頭檔,需在 CCS C 編譯器中設定 Include 路徑。
程式碼中包含以下功能:
1. 顯示器初始化
2. 顯示器顯示 "3 in 1 Multimeter",延遲 1 秒後清除顯示
3. 顯示器顯示交直流切換選項和電壓值
4. 設定交直流切換按鈕,切換 AC/DC 模式
5. 設定測量按鈕,開啟或關閉電壓測量
6. 設定亮度調整按鈕,調整顯示器亮度
7. 顯示器支援亮度調整功能 |
|