硬件设计:
(末尾附文件)
仿真图:
正弦波
三角波:
锯齿波:
方波:
程序设计
#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
.