冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 570|回覆: 0
打印 上一主題 下一主題

[討論] PIC16F72 微型示波器

[複製鏈接]

2609

主題

0

好友

992

積分

高級會員

Rank: 4

UID
373967
帖子
8774
主題
2609
精華
0
積分
992
楓幣
2605
威望
969
存款
31556
贊助金額
0
推廣
0
GP
1205
閱讀權限
50
在線時間
451 小時
註冊時間
2023-1-12
最後登入
2024-11-4

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-9 09:32:29 |只看該作者 |倒序瀏覽
以下是使用PIC16F72製作微型示波器示例:


#include <htc.h>

__CONFIG(HS & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN & DEBUGDIS);

#define LCD_RS RA0
#define LCD_RW RA1
#define LCD_E  RA2
#define LCD_D4 RA3
#define LCD_D5 RA4
#define LCD_D6 RA5
#define LCD_D7 RA6

typedef unsigned char u8;
typedef unsigned int u16;

void delay(u16 i)
{
    while(i--);
}

void LCD_write_byte(u8 dat, u8 cmd)
{
    LCD_RS = cmd;
    LCD_RW = 0;
    LCD_D7 = dat >> 7;
    LCD_D6 = (dat >> 6) & 0x01;
    LCD_D5 = (dat >> 5) & 0x01;
    LCD_D4 = (dat >> 4) & 0x01;
    LCD_E = 1;
    delay(2);
    LCD_E = 0;
    LCD_D7 = (dat >> 3) & 0x01;
    LCD_D6 = (dat >> 2) & 0x01;
    LCD_D5 = (dat >> 1) & 0x01;
    LCD_D4 = dat & 0x01;
    LCD_E = 1;
    delay(2);
    LCD_E = 0;
}

void LCD_init()
{
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_E  = 0;
    LCD_write_byte(0x30, 1);
    LCD_write_byte(0x30, 1);
    LCD_write_byte(0x30, 1);
    LCD_write_byte(0x20, 1);
    LCD_write_byte(0x28, 1);
    LCD_write_byte(0x0c, 1);
    LCD_write_byte(0x06, 1);
    LCD_write_byte(0x01, 1);
}

void LCD_clear()
{
    LCD_write_byte(0x01, 1);
    delay(2000);
}

void LCD_display(u8 *s, u8 x, u8 y)
{
    u8 i;
    if(y == 0)
    {
        x |= 0x80;
    }
    else if(y == 1)
    {
        x |= 0xc0;
    }
    LCD_write_byte(x, 1);
    for(i = 0; s[i] != '\0'; i++)
    {
        LCD_write_byte(s[i], 0);
    }
}

void main()
{
    u8 buf[16];
    u16 i, t;
    TRISA = 0xff;
    TRISB = 0x00;
    TRISC = 0x00;
    PORTB = 0x00;
    PORTC = 0x00;
    LCD_init();
    LCD_display("OSC:", 0, 0);
    while(1)
    {
        for(i = 0; i < 128; i++)
        {
            t = PORTA;
            t = (t << 8) + PORTA;
            sprintf(buf, "%04d", t);
            LCD_display(buf, i % 16, i / 16 + 1);
            delay(50);
        }
    }
}
在這個示例代碼中,使用了PORTA作為示波器的輸入口。

程序每50個時鐘週期讀取一次


輸入口的電平,並將讀取到的數值在LCD上進行顯示,實現了一個簡單的微型示波器。

需要的零件如下:

PIC16F72微控制器
16x2字符LCD顯示器
10K歐姆電位器
適當的電容和電阻
杜邦線等連接線
連接腳位如下:

PIC16F72        LCD顯示器
RA0        RS
RA1        RW
RA2        E
RA3        D4
RA4        D5
RA5        D6
RA6        D7
RB0        10K歐姆電位器
PORTA        輸入信號
其中,10K歐姆電位器用於調節LCD的對比度。
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-11-5 02:06

回頂部