|
用51單片機(jī)做的簡易示波器,利用proteus里的波形生成器在通過ADC轉(zhuǎn)換,就可以顯示在LCD12864上。正弦波,三角波,方波等都能顯示
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
示波器.png (81.81 KB, 下載次數(shù): 101)
下載附件
2020-10-22 20:24 上傳
單片機(jī)源程序如下:
- #include "reg51.h"
- #include "LCD12864.h"
- #include "font.h"
- #define ADC_VALUE P0
- sbit START = P3^4;
- sbit OE = P3^6;
- sbit EOC = P3^5;
- #define COLLECT_NUM 64
- uint8_t adc_collect[COLLECT_NUM];
- uint8_t GatAdcValue()
- {
- uint8_t temp;
-
- START = 1;
- START = 0; // 下降沿觸發(fā)轉(zhuǎn)換
- OE = 1;
- while(EOC == 0); //等待轉(zhuǎn)換完成
- temp = ADC_VALUE;
- OE = 0;
- return temp;
-
-
- }
- void main()
- {
- uint8_t i,j,k,row,col,page,Data;
- uint8_t old_Data,old_page,temp_Data,temp_Data2,temp_page;
- LCD12864_Init();
-
-
- while(1)
- {
- for(i = 0;i<COLLECT_NUM;i++)
- adc_collect[i] = GatAdcValue();
- for(j = 0;j<COLLECT_NUM;j++)
- {
- col = j; // 列
- row = adc_collect[j]/4; // 計(jì)算在第幾行
- page = row/8;
- Data = 0x01 <<(row-page*8);
- refresh_one_list(col);
-
- if(j!=0)
- {
- temp_Data2 = Data;
- temp_page = page;
- if(page == old_page) // 同一頁內(nèi)
- {
- if(Data > old_Data) //波形下降 向上補(bǔ)充
- {
- temp_Data = Data;
- temp_Data = temp_Data>>1;
- while(temp_Data!=old_Data)
- {
- temp_Data = temp_Data>>1;
- Data = Data|(Data>>1); //向上補(bǔ)充
- }
- }
- else if(Data < old_Data) // 波形上升 向下補(bǔ)充
- {
- temp_Data = Data;
- temp_Data =temp_Data<<1;
- while(temp_Data!=old_Data)
- {
- temp_Data =temp_Data<<1;
- Data = Data|(Data<<1); //向下補(bǔ)充
- }
- }
- } //end if(page == old_page) // 同一頁內(nèi)
- else if(page > old_page) // 跨頁下降 應(yīng)該向上補(bǔ)充
- {
- temp_Data = Data;
- for(k = 0;k<(row-page*8);k++) //向上補(bǔ)充到本頁頂部
- temp_Data |= (temp_Data>>1); //向上補(bǔ)充
- write_one_list(page,col,temp_Data); //填充本頁
- page--; //往上一頁
- while(page != old_page) //填充兩點(diǎn)之間的中間的頁
- {
- write_one_list(page,col,0xFF);
- page --;
- }
- if(page == old_page) // 來到了同一頁
- {
- temp_Data = 0x80;
- Data = 0x80;
- if(Data>old_Data)
- {
- temp_Data = temp_Data>>1; // 上移一格
- while(temp_Data != old_Data)
- {
- temp_Data = temp_Data>>1; // 上移一格
- Data = Data|(Data>>1); // 向上補(bǔ)充
-
- }
- }
- }
- }//end else if(page > old_page) // 跨頁下降 應(yīng)該向上補(bǔ)充
- else if(page < old_page) // 跨頁上升 應(yīng)該向下補(bǔ)充
- {
- temp_Data = Data;
- for(k = 0;k<(7-(row-page*8));k++)
- { temp_Data|=(temp_Data<<1);}
- write_one_list(page,col,temp_Data);
- page++; //向下一頁
- while(page != old_page)
- {
- write_one_list(page,col,0xFF);
- page++ ; // 下降一頁
- }
- if(page == old_page)
- {
- Data = 0x01;
- temp_Data = 0x01;
- if(Data < old_Data)
- {
- temp_Data = temp_Data<<1; //向下移動(dòng)一格
- while(temp_Data != old_Data)
- {
- temp_Data = temp_Data<<1; //向下移動(dòng)一格
- Data |= (Data<<1); //向下補(bǔ)充
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
示波器.rar
(124.61 KB, 下載次數(shù): 168)
2020-10-22 20:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|