900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 基于51单片机的简易数字示波器proteus仿真

基于51单片机的简易数字示波器proteus仿真

时间:2022-02-05 20:52:39

相关推荐

基于51单片机的简易数字示波器proteus仿真

硬件设计:

(末尾附文件)

仿真图:

正弦波

三角波:

锯齿波:

方波:

程序设计

#include "reg51.h"#include "LCD12864.h"#include "font.h"#define ADC_VALUE P0sbit START = P3^4;sbit OE = P3^6;sbit EOC = P3^5;#define COLLECT_NUM 64uint8_t adc_collect[COLLECT_NUM];uint8_t GatAdcValue(){uint8_t temp;START = 1;START = 0; // 下降沿触发转换OE = 1;while(EOC == 0); //等待转换完成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; // 计算在第几行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) // 同一页内{if(Data > old_Data)//波形下降 向上补充{temp_Data = Data;temp_Data = temp_Data>>1;while(temp_Data!=old_Data){temp_Data = temp_Data>>1;Data = Data|(Data>>1);//向上补充}}else if(Data < old_Data) // 波形上升 向下补充{temp_Data = Data;temp_Data =temp_Data<<1;while(temp_Data!=old_Data){temp_Data =temp_Data<<1; Data = Data|(Data<<1);//向下补充}}} //end if(page == old_page) // 同一页内 else if(page > old_page) // 跨页下降 应该向上补充{temp_Data = Data;for(k = 0;k<(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) // 来到了同一页{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);// 向上补充}}}}//end else if(page > old_page) // 跨页下降 应该向上补充else if(page < old_page) // 跨页上升 应该向下补充{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; //向下移动一格while(temp_Data != old_Data){temp_Data = temp_Data<<1; //向下移动一格Data |= (Data<<1); //向下补充}}}}//end else if(page < old_page) // 跨页上升 应该向下补充old_Data = temp_Data2;old_page = temp_page;}else{old_Data = Data;old_page = page;}write_one_list(page,col,Data); }}}

.

文件仅供参考

链接:/s/1M52b64FYtIi1NtVH-OtR-w

提取码:yi2b

.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。