0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Proteus:简易示波器

Harmony&嵌入式学习 来源:Harmony&嵌入式学习 作者:Harmony&嵌入式学 2023-06-14 11:35 次阅读

视频链接:https://www.bilibili.com/video/BV1sr4y1C7tH

pYYBAGSJNVqAVd_sAAFQLSkZtBE712.pngpYYBAGSJNWGAemFmAARCyOnG4UU501.pngpoYBAGSJNWeAII6aAAFbdaTb3xE825.pngpYYBAGSJNW2ANOfGAAJCXhm_3tw495.png
#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include < intrins.h >
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit CLK=P3^3;//定义时钟信号口
sbit DIN=P3^1;//定义2543数据写入口
sbit DOUT=P3^0;//定义2543数据读取口
sbit CS=P3^2;//定义2543片选信号口

#define LCD_databus P0 //LCD12864的8位数据口

sbit RS=P2^2; 	//RS为0---命令;1----数据 
sbit RW=P2^1; 	//RW为1---写;0---读 
sbit EN=P2^0; 	//使能端 
sbit CS1=P2^4; 	//片选1低电平有效,控制左半屏 
sbit CS2=P2^3; 	//片选1低电平有效,控制右半屏 
ulong volt;//测量的电压值
ulong Result;

unsigned char code da[]={/*--  文字:  大  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x40,0x40,0x40,0x40,0xFF,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,
0x00,0x20,0x10,0x08,0x04,0x03,0x00,0x01,0x02,0x04,0x08,0x10,0x30,0x20,0x20,0x00};


unsigned char code BMP[][64]={/*--  调入了一幅图像:D:Desktop12848坐标.BMP  --*/
/*--  宽度x高度=128x48  --*/
0X00,0X17,0X15,0X1D,0X00,0X02,0XFE,0X06,0X02,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X07,0X04,0X1F,0X00,0X00,0XFF,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X15,0X15,0X1F,0X00,0X00,0XFF,0X04,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X0E,0X8B,0X0B,0X00,0X00,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0XC0,0X00,0X0F,0X00,0XC0,0X00,0XFF,0X02,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X01,0X02,0X01,0X00,0X78,0X4B,0X7A,0X02,0X02,0X02,0X02,0X02,0X02,0X02,0X02,
0XFB,0X02,0X02,0X02,0X02,0X02,0X02,0X02,0X02,0XEA,0XAA,0XBA,0X02,0X02,0X02,0X02,
0X02,0X02,0XA2,0XAA,0XFA,0X02,0X02,0X02,0X02,0X02,0X02,0X02,0X3A,0X23,0XFA,0X02,
0X02,0X02,0X02,0X02,0X02,0X02,0XBA,0XAB,0XEA,0X02,0X02,0X02,0X02,0X02,0X02,0X02,
0XFA,0XAB,0XEA,0X02,0X02,0X02,0X02,0X02,0X02,0X02,0X0A,0X0B,0XFA,0X02,0X02,0X02,
0X02,0X02,0X02,0X02,0XFA,0XAB,0XFA,0X02,0X02,0X02,0X02,0X02,0X02,0X02,0XBA,0XFA,
0X02,0X02,0X02,0X02,0X02,0X02,0XFA,0X02,0XFB,0X8A,0XFA,0X02,0X02,0X02,0X02,0X02,
0X02,0XFA,0X03,0XFA,0X02,0X02,0X02,0X02,0X07,0X00,0X00,0X00,0X00,0X00,0X02,0X02,
};


void Read_busy()//读“忙”函数-----数据线的最高位DB71则busy		
{
	P0=0x00;
   	RS=0;  
   	RW=1; 
	EN=1;
	while(P0 & 0x80);
	EN=0;
}

void write_LCD_command(uchar value)	//写命令函数 
{
   Read_busy();						//对LCD的每次读写都要读忙 
   RS=0;	 						//选择命令 
   RW=0; 							//读操作 
   LCD_databus=value;
   EN=1;							//EN由1----0锁存有效数据 
   _nop_();
   _nop_(); 
   EN=0;
}

void write_LCD_data(uchar value)//写数据函数	
{
   Read_busy();
   RS=1; 						//选择数据 
   RW=0;	
   LCD_databus=value;
   EN=1;						//EN由1----0锁存有效数据 
   _nop_();		
   _nop_();
   EN=0;
}

uchar Read_LCD(void)			//读数据函数 
{
	uchar value;
	Read_busy();
	LCD_databus=0xFF;			//先进行一次空读操作 
	RS=1;
	RW=1;
	EN=1;
	_nop_();
	_nop_();
	EN=0;
	
	LCD_databus=0xFF;			//读取真正的数据 
	RS=1;
	RW=1;
	EN=1;
	value=LCD_databus;
	_nop_();
	_nop_();
	EN=0;
	
	return value; 
}

void Set_page(uchar page)		//设置“页”LCD12864共8页,一页是8行点阵点	
{
  page=0xb8|page; 				//页的首地址为0xB8
  write_LCD_command(page);
}

void Set_line(uchar startline)  //设置显示的起始行	   
{
  startline=0xC0|startline;     //起始行地址为0xC0 
  write_LCD_command(startline); //设置从哪行开始:共0--63;一般从0 行开始显示
}

void Set_column(uchar column)	//设置显示的列	
{
  column=column &0x3f; 			//列的最大值为64
  column= 0x40|column; 			//列的首地址为0x40 
  write_LCD_command(column);	//规定显示的列的位置 
}

void SetOnOff(uchar onoff)		//显示开关函数:0x3E是关显示,0x3F是开显示   
{
	onoff=0x3e|onoff; 			//onoff:1---开显示;0---关显示
	write_LCD_command(onoff);
}

void SelectScreen(uchar screen)	//选择屏幕 
{ 						 
   switch(screen)
   { 
   	 case 0: CS1=0;CS2=0;break; //全屏     
     case 1: CS1=0;CS2=1;break;//左半屏        
     case 2: CS1=1;CS2=0;break;//右半屏       
     default:break; 
   }
}

void ClearScreen(uchar screen)	//清屏函数  
{ 	
     uchar i,j;
     SelectScreen(screen);		//0--全屏;1---左半屏;2---右半屏 
	 for(i=0;i< 8;i++)	 		//控制页数0-7,共8页
	 {
        Set_page(i);
		Set_column(0);
      	for(j=0;j< 64;j++)	   //控制列数0-63,共64列
	  	{
          write_LCD_data(0x00); //写入0,地址指针自加1 
      	}
     }					 
}

void InitLCD() 					//LCD的初始化  
{ 
	SetOnOff(1); 				//开显示
	SelectScreen(0);
	ClearScreen(0);				//清屏
	Set_line(0); 				//开始行:0
}

void Draw_dots(uchar x,uchar y,uchar color)
{
	uchar x_byte;
	uchar x_bit; 
	uchar Temp_data;		//暂时存放从LCD读出的数据 
	x_byte=(y >>3);  		//计算出该点属于哪个字节 
	x_bit=y-(x_byte< <3);	//属于字节的哪一位?

	
	if(x >63)				//x>63则显示在右半屏 
	{
		SelectScreen(2);
		x=x-64;
	}
	else					//显示在左半屏 
	{
		SelectScreen(1); 
	}
	Set_page(x_byte);		//设置行地址 
	Set_column(x);			//设置列地址
 	Temp_data=Read_LCD();	//先读出没打点前LCD中的数据 
	switch(color)
	{
		case 0x01 : Temp_data &= ~(1< >=1;
	volt=ad;//取走转换结果
	volt=volt*1221;//例子的满量程为5V,转换分辩率为12位(2的12次方=4096) 。即最大值是255,5/4096=1221mV,即例子中的1V代表实际1221mV        
}

void delay(uchar ms) 
{  // 延时子程序 
uchar i; 
while(ms--) 
{ 
  for(i = 0;i< 250;i++);  
} 
}


void main()
{	
  uchar x,y;
  InitLCD();			//初始12864  
  ClearScreen(0);		//清屏
  Set_line(0);		//显示开始行
		
	Display_picture(BMP);  		//坐标图
	Display_HZ(1,0,0,da);
	Display_HZ(2,0,2,da);
	
	while(1)
	{
		
			for(x=12;x< 128;x++)			//正弦曲线
	{
		read2543(0);
	  Result = volt / 125030;
		y=56-Result;
		Draw_dots(x,y,2);
		delay(20);
	}
	Display_picture(BMP);  		//坐标图
	}
}
审核编辑:汤梓红
);break;>
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 示波器
    +关注

    关注

    113

    文章

    6185

    浏览量

    184478
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119979
  • Proteus
    +关注

    关注

    79

    文章

    1692

    浏览量

    106357
收藏 人收藏

    评论

    相关推荐

    Proteus教程:简易电压表

    Proteus教程:简易电压表
    的头像 发表于 06-14 11:33 4951次阅读
    <b class='flag-5'>Proteus</b>教程:<b class='flag-5'>简易</b>电压表

    【assingle分享】proteus仿真之avr简易示波器仿真

    `proteus仿真之avr简易示波器仿真`
    发表于 03-30 15:23

    书籍教程:Proteus简易教程

    本资料是关于Proteus.简易教程的下载,有需要的可以下载看看
    发表于 07-26 23:16

    求基于单片机的简易示波器的课程设计包括proteus仿真

    求基于单片机的简易示波器的课程设计包括proteus仿真
    发表于 06-22 10:20

    基于51单片机的简易示波器仿真——》Proteus7.5仿真源文件+C语言源工程文件

    基于51单片机的简易示波器仿真——》Proteus7.5仿真源文件+C语言源工程文件;一切来自互联网,无私分享!
    发表于 04-14 10:08

    基于AVR的简易示波器设计

    基于AVR的简易示波器设计:介绍了以AVR单片机ATmega16为核心,采用前端信号调理电路、程控增益放大器以及波形显示LCD(GDM12864A)实现的一个简易示波器。并给出该系统设
    发表于 05-26 23:41 97次下载

    基于FPGA的双通道简易可存储示波器设计

    基于FPGA的双通道简易可存储示波器设计:本文介绍了一种基于FPGA的采样速度60Mbit/s的双通道简易数字示波器设计,能够实现量程和采样频率的自动调整、数据缓存、显示以及与计算机
    发表于 09-29 10:45 110次下载

    简易示波器时基发生器

    简易示波器时基发生器 NE555
    发表于 09-29 11:49 950次阅读
    <b class='flag-5'>简易</b><b class='flag-5'>示波器</b>时基发生器

    Proteus示波器使用技巧

    Proteus示波器使用技巧 左下角
    发表于 03-21 18:46 2.8w次阅读
    <b class='flag-5'>Proteus</b>中<b class='flag-5'>示波器</b>使用技巧

    基于STM32的简易示波器设备驱动的研究

    基于STM32的简易示波器设备驱动的研究
    发表于 11-06 17:04 68次下载

    Proteus示波器简介

    Proteus示波器的操作 简介 此简介基于 proteus7.8 版本
    发表于 03-22 11:19 15次下载

    简易电子示波器_陈鹏飞

    简易电子示波器_陈鹏飞。
    发表于 05-05 11:01 30次下载

    简易数字存储示波器设计

    设计一简易数字存储示波器简易DSO)。
    发表于 03-18 15:20 412次下载
    <b class='flag-5'>简易</b>数字存储<b class='flag-5'>示波器</b>设计

    基于stm32mini开发板的简易函数发生器和简易示波器

    基于stm32 mini开发板的简易示波器
    发表于 01-17 10:01 35次下载
    基于stm32mini开发板的<b class='flag-5'>简易</b>函数发生器和<b class='flag-5'>简易</b><b class='flag-5'>示波器</b>

    基于LabVIEW的简易虚拟示波器设计

    基于LabVIEW的简易虚拟示波器设计方法。
    发表于 04-06 15:33 126次下载