标题:
51单片机用LCD12864做的示波器程序和Proteus仿真
[打印本页]
作者:
zhangyouxiu
时间:
2020-10-22 20:25
标题:
51单片机用LCD12864做的示波器程序和Proteus仿真
用51单片机做的简易示波器,利用proteus里的波形生成器在通过ADC转换,就可以显示在LCD12864上。正弦波,三角波,方波等都能显示
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
示波器.png
(81.81 KB, 下载次数: 101)
下载附件
2020-10-22 20:24 上传
单片机源程序如下:
#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; // 下降沿触发转换
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); //向下补充
}
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
示波器.rar
(124.61 KB, 下载次数: 168)
2020-10-22 20:25 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
老舍233
时间:
2021-4-28 11:09
仿真图在哪里啊,找不到
作者:
lqh_fairy
时间:
2021-10-24 21:06
请问有原理图吗,实物图上12864怎么接,CS1,CS2改怎么接
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1