基于51单片机简易数字示波器Proteus仿真+源程序

该文章已生成可运行项目,

功能介绍:

采用51单片机作为主控CPU;LCD12864可显示方波,三角波,锯齿波,正弦波等,可通过光标对波形进行测量,可以调节显示波形的幅度和频率,也可以将波形进行左右拖拉,完美的仿真出一个51单片机示波器,程序采用keil编写,有中文注释,新手容易看懂,仿真采用Proteus,全套仿真资料齐全:文末有资料分享:

227-基于51单片机简易数字示波器Proteus仿真(程序+仿真+全套资料)

图片

 

程序部分展示,有中文注释,新手容易看懂

sbit pinLCD_CSB = P2^7;
sbit pinLCD_DI = P1^7;                    // 寄存器操作
sbit pinLCD_RW = P2^4;                    // 写寄存器操作
sbit pinLCD_E = P2^5;
#define LCD_DataPort P0

#endif


#if 0		//Test
sbit pinLCD_CSA = P2^4;
sbit pinLCD_CSB = P2^3;
sbit pinLCD_DI = P2^2;                    // 寄存器操作
sbit pinLCD_RW = P2^1;                    // 写寄存器操作
sbit pinLCD_E = P2^0;
#define LCD_DataPort P1

#endif



#define  LCDField_NULL  4
#define c_LCD_MaxColNumber 16
//uchar ucDotData;

//----------------------------------------------------------------------------
// 函 数 名:void LCD_DrvFieldSelect(uchar ucField)
// 用    途:选择液晶的区域,共1#?三个区域
// 入口参数:uchar ucField 第几个区域,区域为 1 、 2 、3 , 三个区域
// 返    回: 无
// ----------------------------------------------------------------------------
void LCD_DrvFieldSelect(uchar ucField)
{
	switch(ucField)
	{
		case 0:
 			pinLCD_CSA = 0;
			pinLCD_CSB = 1;
			break;
		case 1:
			pinLCD_CSA = 1;
			pinLCD_CSB = 0;
			break;
		default:
            pinLCD_CSA = 1;
			pinLCD_CSB = 1;
			break;
	}
}

//----------------------------------------------------------------------------
// 函 数 名:void LCD_DrvWriteREG(uchar ucIndicate)
// 用    途:写液晶寄存器
// 入口参数:ucField    寄存器所在的通道
//           ucIndicate 指令
// 返    回: 无
//----------------------------------------------------------------------------
void LCD_DrvWriteREG(uchar ucField,uchar ucIndicate)
{


 	pinLCD_DI = 0;                    // 寄存器操作
	pinLCD_RW = 0;                    // 写寄存器操作

    LCD_DrvFieldSelect(ucField);      // 液晶片选

    LCD_DataPort = ucIndicate;    // 向液晶寄存器写入数据
	pinLCD_E = 1;
	pinLCD_E = 0;


    pinLCD_RW = 1;                     // 写寄存器操作

	pinLCD_DI = 0;                    // 寄存器操作
    LCD_DrvFieldSelect(LCDField_NULL); // 关闭液晶片选
}

//----------------------------------------------------------------------------
// 函 数 名:uchar LCD_DrvReadREG(uchar ucField)
// 用    途:读液晶寄存器
// 入口参数:无
// 返    回: 液晶寄存器中的内容
//----------------------------------------------------------------------------

uchar LCD_DrvReadREG(uchar ucField)
{ 
	uchar ucResult;

	pinLCD_E = 0;

 	pinLCD_DI = 0;                     // 寄存器操作
	pinLCD_RW = 1;                     // 写寄存器操作
    _nop_();

    LCD_DrvFieldSelect(ucField);       // 液晶片选

    LCD_DataPort = 0xFF;    // 向液晶寄存器写入数据
   	pinLCD_E = 1;
	pinLCD_E = 0;

    ucResult = LCD_DataPort ;     // 从液晶寄存器读出数据

    LCD_DrvFieldSelect(LCDField_NULL); // 关闭液晶片选

    return ucResult;
}


//----------------------------------------------------------------------------
// 函 数 名:void LCD_DrvWriteData(uchar ucData)
// 用    途:向液晶写入数据
// 入口参数:ucField    寄存器所在的通道
//           ucData  待写入的数据
// 返    回: 无
//----------------------------------------------------------------------------
void LCD_DrvWriteData(uchar ucField,uchar ucData)
{

	pinLCD_DI = 1;                      // 数据操作
    pinLCD_RW = 0;  

    LCD_DrvFieldSelect(ucField);        // 液晶片选
    LCD_DataPort = ucData;         // 向液晶寄存器写入数据
	pinLCD_E = 1;
	pinLCD_E = 0;

	pinLCD_RW = 1;
	pinLCD_DI = 1;                      // 数据操作

    LCD_DrvFieldSelect(LCDField_NULL);  // 关闭液晶片选
}

 

百度云盘资料下载链接 

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值