亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 800|回復: 19
打印 上一主題 下一主題
收起左側

為什么我的示波器仿真時,輸出屏一直是黑的呢?

[復制鏈接]
跳轉到指定樓層
樓主
ID:1170740 發表于 2026-5-4 12:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我打算自制一個基于STC89C52的單片機作為51單片機課程的課設,從網上找了個用STC60作為主控芯片的方案,想著自己添加一個ADC0832去實現相同的單片機功能,現在畫了一個仿真圖想試試效果,但是下進去代碼之后就沒有任何顯示,經過了豆包和deepseek一塊檢查,一直在改代碼,現在想求助一下,請問我的仿真連線有什么問題嗎?附上我的原理圖,請求大佬出手相助。

這個示波器用的是STC89C52作為主控芯片,MC33072,ADC0832作為數字信號和模擬信號的輸入,加了個LM393作為頻率記錄,降壓芯片用的是SCT2450


現在就是想問一下硬件方面有沒有問題,因為我還不熟悉代碼,所有代碼都是用AI幫忙編寫的。

屏幕截圖 2026-05-04 124329.png (99.84 KB, 下載次數: 0)

這里是下載了代碼之后的效果

這里是下載了代碼之后的效果

屏幕截圖 2026-05-04 124319.png (103.19 KB, 下載次數: 0)

這是沒有啟動的情況

這是沒有啟動的情況

屏幕截圖 2026-05-04 125341.png (214.76 KB, 下載次數: 0)

這是我的示波器原理圖

這是我的示波器原理圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1170740 發表于 2026-5-5 12:14 | 只看該作者
有沒有人能幫幫我呢
回復

使用道具 舉報

板凳
ID:161164 發表于 2026-5-5 15:17 | 只看該作者
代碼呢?
回復

使用道具 舉報

地板
ID:342822 發表于 2026-5-5 19:31 | 只看該作者
查看仿真里的示例“Adafruit LI9341 TFT LCD Demo”如何接線的!!
回復

使用道具 舉報

5#
ID:1170889 發表于 2026-5-6 23:44 | 只看該作者
頻率沒對吧
回復

使用道具 舉報

6#
ID:584814 發表于 2026-5-7 08:19 | 只看該作者
要信任AI,大膽執著地繼續用AI試,總有成功的一天。
別特么信壇里的人,他們都要見源碼和仿真什么的才愿意出手,比AI弱爆了。
回復

使用道具 舉報

7#
ID:844772 發表于 2026-5-7 10:43 | 只看該作者
除了電壓有點高,看不出哪錯,建議就畫條線,看看是否能行。
回復

使用道具 舉報

8#
ID:1064915 發表于 2026-5-7 14:54 | 只看該作者
有STC60這個芯片嗎
回復

使用道具 舉報

9#
ID:76027 發表于 2026-5-7 16:43 | 只看該作者
代碼一點都看不懂,就上AI寫代碼。AI會忽悠你到老。別信網上說的,不懂代碼可以直接讓AI寫。
回復

使用道具 舉報

10#
ID:1156764 發表于 2026-5-7 18:05 | 只看該作者
看著沒有什么嚴重的問題,
或許你可以先不接放大器電路唷,隨便接個電壓進去,看看能不能打印出來,
如果都打不了的話,很有可能是代碼的問題
回復

使用道具 舉報

11#
ID:1170740 發表于 2026-5-7 18:36 | 只看該作者

#include <reg51.h>
#define uchar unsigned char
#define uint  unsigned int

/************************ 引腳定義(嚴格匹配仿真圖)************************/
// LCD1 控制引腳
sbit LCD_RES  = P1^6;  // RES -> P1.6
sbit LCD_DC   = P1^5;  // D/C -> P1.5
sbit LCD_CS   = P1^4;  // CS  -> P1.4
sbit LCD_WR   = P1^7;  // WR  -> P1.7
sbit LCD_RD   = P1^3;  // RD  -> P1.3
#define LCD_DATA  P0   // 數據總線 D0~D7 -> P0口(含P0.0蜂鳴器,不影響)

// ADC0832 引腳
sbit ADC_CS   = P1^0;  // CS  -> P1.0
sbit ADC_CLK  = P1^1;  // CLK -> P1.1
sbit ADC_DI   = P1^2;  // DI  -> P1.2
sbit ADC_DO   = P1^2;  // DO  -> P1.2(ADC0832 DI/DO復用)

// 蜂鳴器
sbit BEEP     = P0^0;  // 蜂鳴器 -> P0.0

/************************ 基礎參數定義 ************************/
#define SCREEN_W  240   // LCD寬度
#define SCREEN_H  320   // LCD高度
#define BASE_Y    160   // 波形基準線(屏幕垂直中心)
#define SCALE     1     // 電壓縮放系數(適配ADC采樣值)
#define RED       0xF800// 基準線顏色
#define GREEN     0x07E0// 波形顏色
#define BLACK     0x0000// 背景色

/************************ 延時函數(12MHz晶振適配)************************/
void delay_ms(uint ms) {
    uint i,j;
    for(i=ms; i>0; i--)
        for(j=110; j>0; j--);
}

void delay_us(uint us) {
    while(us--);
}

/************************ LCD1(ILI9341)驅動函數 ************************/
// 寫指令
void lcd_write_cmd(uchar cmd) {
    LCD_DC = 0;  // 指令模式
    LCD_CS = 0;
    LCD_RD = 1;  // 禁用讀
    LCD_DATA = cmd;
    LCD_WR = 0;
    LCD_WR = 1;  // 上升沿寫指令
    LCD_CS = 1;
}

// 寫數據
void lcd_write_data(uchar dat) {
    LCD_DC = 1;  // 數據模式
    LCD_CS = 0;
    LCD_RD = 1;
    LCD_DATA = dat;
    LCD_WR = 0;
    LCD_WR = 1;  // 上升沿寫數據
    LCD_CS = 1;
}

// 設置顯示窗口
void lcd_set_window(uint x1, uint y1, uint x2, uint y2) {
    lcd_write_cmd(0x2A);  // 列地址設置
    lcd_write_data(x1>>8); lcd_write_data(x1&0xFF);
    lcd_write_data(x2>>8); lcd_write_data(x2&0xFF);

    lcd_write_cmd(0x2B);  // 行地址設置
    lcd_write_data(y1>>8); lcd_write_data(y1&0xFF);
    lcd_write_data(y2>>8); lcd_write_data(y2&0xFF);

    lcd_write_cmd(0x2C);  // 寫GRAM
}

// 畫像素點
void lcd_draw_pixel(uint x, uint y, uint color) {
    if(x >= SCREEN_W || y >= SCREEN_H) return; // 邊界保護
    lcd_set_window(x, y, x, y);
    lcd_write_data(color>>8);  // 高8位
    lcd_write_data(color&0xFF);// 低8位
}

// 清屏
void lcd_clear(uint color) {
    uint x, y;
    lcd_set_window(0, 0, SCREEN_W-1, SCREEN_H-1);
    for(y=0; y<SCREEN_H; y++) {
        for(x=0; x<SCREEN_W; x++) {
            lcd_write_data(color>>8);
            lcd_write_data(color&0xFF);
        }
    }
}

// LCD初始化(適配仿真圖接線)
void lcd_init(void) {
    // LCD硬件復位
    LCD_RES = 0;
    delay_ms(20);
    LCD_RES = 1;
    delay_ms(50);

    // ILI9341初始化時序
    lcd_write_cmd(0xCF);
    lcd_write_data(0x00); lcd_write_data(0xC1); lcd_write_data(0X30);
    lcd_write_cmd(0xED);
    lcd_write_data(0x64); lcd_write_data(0x03); lcd_write_data(0X12); lcd_write_data(0X81);
    lcd_write_cmd(0xE8);
    lcd_write_data(0x85); lcd_write_data(0x00); lcd_write_data(0x78);
    lcd_write_cmd(0xCB);
    lcd_write_data(0x39); lcd_write_data(0x2C); lcd_write_data(0x00); lcd_write_data(0x34); lcd_write_data(0x02);
    lcd_write_cmd(0xF7); lcd_write_data(0x20);
    lcd_write_cmd(0xEA); lcd_write_data(0x00); lcd_write_data(0x00);
    lcd_write_cmd(0xC0); lcd_write_data(0x23);
    lcd_write_cmd(0xC1); lcd_write_data(0x10);
    lcd_write_cmd(0xC5); lcd_write_data(0x3E); lcd_write_data(0x28);
    lcd_write_cmd(0xC7); lcd_write_data(0x86);
    lcd_write_cmd(0x36); lcd_write_data(0x48);
    lcd_write_cmd(0x3A); lcd_write_data(0x55);
    lcd_write_cmd(0xB1); lcd_write_data(0x00); lcd_write_data(0x18);
    lcd_write_cmd(0xB6); lcd_write_data(0x08); lcd_write_data(0x82); lcd_write_data(0x27);
    lcd_write_cmd(0xF2); lcd_write_data(0x00);
    lcd_write_cmd(0x26); lcd_write_data(0x01);
    lcd_write_cmd(0xE0);
    lcd_write_data(0x0F); lcd_write_data(0x31); lcd_write_data(0x2B); lcd_write_data(0x0C);
    lcd_write_data(0x0E); lcd_write_data(0x08); lcd_write_data(0x4E); lcd_write_data(0xF1);
    lcd_write_data(0x37); lcd_write_data(0x07); lcd_write_data(0x10); lcd_write_data(0x03);
    lcd_write_data(0x0E); lcd_write_data(0x09); lcd_write_data(0x00);
    lcd_write_cmd(0xE1);
    lcd_write_data(0x00); lcd_write_data(0x0E); lcd_write_data(0x14); lcd_write_data(0x03);
    lcd_write_data(0x11); lcd_write_data(0x07); lcd_write_data(0x31); lcd_write_data(0xC1);
    lcd_write_data(0x48); lcd_write_data(0x08); lcd_write_data(0x0F); lcd_write_data(0x0C);
    lcd_write_data(0x31); lcd_write_data(0x36); lcd_write_data(0x0F);
    lcd_write_cmd(0x11);  // 退出睡眠
    delay_ms(120);
    lcd_write_cmd(0x29);  // 開啟顯示
    lcd_clear(BLACK);     // 清屏為黑色背景
}

/************************ ADC0832采樣函數 ************************/
uchar adc0832_read(uchar ch) {
    uchar i, dat = 0, dat1 = 0;
    ADC_CS = 0;          // 選中ADC
    ADC_CLK = 0;         // 初始時鐘低電平
    ADC_DI = 1;          // 起始位
    delay_us(1);
    ADC_CLK = 1;         // 時鐘上升沿
    delay_us(1);
    ADC_CLK = 0;         // 時鐘下降沿

    // 選擇通道(ch=0選CH0,ch=1選CH1)
    ADC_DI = (ch == 0) ? 1 : 0;
    delay_us(1);
    ADC_CLK = 1;
    delay_us(1);
    ADC_CLK = 0;
    ADC_DI = 1;          // 通道選擇確認位
    delay_us(1);
    ADC_CLK = 1;
    delay_us(1);
    ADC_CLK = 0;
    delay_us(1);

    // 讀取8位采樣數據
    for(i=0; i<8; i++) {
        ADC_CLK = 1;
        delay_us(1);
        ADC_CLK = 0;
        dat <<= 1;
        if(ADC_DO) dat |= 0x01;
    }
    // 讀取反序數據(校驗,可省略)
    for(i=0; i<8; i++) {
        dat1 >>= 1;
        if(ADC_DO) dat1 |= 0x80;
        ADC_CLK = 1;
        delay_us(1);
        ADC_CLK = 0;
    }
    ADC_CS = 1;          // 釋放ADC
    return (dat == dat1) ? dat : 0; // 數據校驗
}

/************************ 示波器核心功能 ************************/
// 繪制基準線+網格(可選,增強可視化)
void draw_base_line(void) {
    uchar x;
    // 繪制垂直基準線(紅色)
    for(x=0; x<SCREEN_W; x++) {
        lcd_draw_pixel(x, BASE_Y, RED);
    }
}

// 實時繪制波形(示波器核心)
void draw_wave(void) {
    uchar x;
    uchar adc_val;
    int y_curr, y_prev = BASE_Y;

    // 從左到右逐點繪制波形
    for(x=0; x<SCREEN_W; x++) {
        adc_val = adc0832_read(0);  // 讀取CH0采樣值(仿真圖中ADC接CH0)
        // 轉換采樣值為屏幕坐標(適配0~255采樣值到屏幕高度)
        y_curr = BASE_Y - (adc_val - 128) * SCALE;

        // 邊界保護(防止超出屏幕)
        if(y_curr < 0) y_curr = 0;
        if(y_curr >= SCREEN_H) y_curr = SCREEN_H - 1;

        // 清除上一幀對應位置(實現“滾動波形”效果)
        lcd_draw_pixel(x, y_prev, BLACK);
        // 繪制當前采樣點
        lcd_draw_pixel(x, y_curr, GREEN);

        y_prev = y_curr;
        delay_us(50);  // 調整采樣速度(值越小,波形越密)
    }
}

/************************ 主函數 ************************/
void main(void) {
    BEEP = 1;          // 關閉蜂鳴器
    lcd_init();        // 初始化LCD
    draw_base_line();  // 繪制基準線

    // 循環采集+繪制波形(示波器持續工作)
    while(1) {
        draw_wave();
    }
}

回復

使用道具 舉報

12#
ID:1170740 發表于 2026-5-7 18:41 | 只看該作者
taotie 發表于 2026-5-5 19:31
查看仿真里的示例“Adafruit LI9341 TFT LCD Demo”如何接線的!!

仿真里ili9341的接線對應的分別是P1.3->SDI/SDA  P1.4->D/C/SCL  P1.5->CS  P1.6->RES  P1.7->WR/D/C
LEDK->GND  LEDA->100R->+5V
回復

使用道具 舉報

13#
ID:1170740 發表于 2026-5-7 18:47 | 只看該作者
禮盒先生 發表于 2026-5-7 18:05
看著沒有什么嚴重的問題,
或許你可以先不接放大器電路唷,隨便接個電壓進去,看看能不能打印出來,
如果 ...

沒接運放的時候也是黑屏,好像沒什么變化

屏幕截圖 2026-05-07 184622.png (117.68 KB, 下載次數: 0)

這是我沒接運放之后的效果

這是我沒接運放之后的效果
回復

使用道具 舉報

14#
ID:1170740 發表于 2026-5-7 18:50 | 只看該作者
man1234567 發表于 2026-5-7 08:19
要信任AI,大膽執著地繼續用AI試,總有成功的一天。
別特么信壇里的人,他們都要見源碼和仿真什么的才愿意 ...

我相信AI,不過我還是更期待前人的智慧,不敢茍同你的看法
回復

使用道具 舉報

15#
ID:1170740 發表于 2026-5-7 18:51 | 只看該作者

可能是我的代碼太長了,我去壓縮一下試試能不能發出來
回復

使用道具 舉報

16#
ID:1170740 發表于 2026-5-7 18:57 | 只看該作者
glinfei 發表于 2026-5-7 10:43
除了電壓有點高,看不出哪錯,建議就畫條線,看看是否能行。

我剛剛試了一下,直接把信號發生器連接在c52的P1.0口也無法輸出波形
回復

使用道具 舉報

17#
ID:1170740 發表于 2026-5-7 19:02 | 只看該作者
發表于 2026-5-5 12:14
有沒有人能幫幫我呢

還有就是我仿真的時候會彈出兩條警告:1,simulation is not running in real time due to excessive CPU load。
這句的意思是由于CPU負載過高,仿真無法實時運行。
2,Simulation must be paused whilst measuring。
這句話的意思是進行測量時,必須暫停仿真!
或許這兩個是解決我的問題的關鍵呢。
回復

使用道具 舉報

18#
ID:1170740 發表于 2026-5-7 19:09 | 只看該作者
這是代碼

main.zip

2.55 KB, 下載次數: 0

這是我的代碼

回復

使用道具 舉報

19#
ID:844772 發表于 2026-5-8 09:04 | 只看該作者
發表于 2026-5-7 18:57
我剛剛試了一下,直接把信號發生器連接在c52的P1.0口

你就單單寫一段LCD程序,試試能不能顯示唄。這種問題要每個模塊分別試試,再組合。
回復

使用道具 舉報

20#
ID:1170740 發表于 2026-5-8 17:02 | 只看該作者
joyb 發表于 2026-5-7 14:54
有STC60這個芯片嗎

這是一個前綴,這個前綴的51芯片有內置ad,但是我用的是stc89c52
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表