⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 master_main.c

📁 基于AT89S51的简易数字逻辑分析仪
💻 C
字号:
#include<reg51.h>
#include"math.h"
#include"Config.h"
#include"IOCfg.c"
#include"TimeDLY.h"
#include"IIC_PCA8574.h"
#include"LogValue.h"
#include"LCD.h"
#include"Key.h"
#include"Touch.h"
#include"Serial.h"

//"0 ~ 9"字库码
INT16U NUM[10]={
				0xA3B0,0xA3B1,0xA3B2,0xA3B3,0xA3B4,
				0xA3B5,0xA3B6,0xA3B7,0xA3B8,0xA3B9};

bit     TOUCH_SET = 0;        //设置触发指示
INT8U   TOUCH_MODE = SINGLE;  //触发方式
INT32U  TOUCH_WORD = 0x00;    //触发字
INT8U   TOUCH_ADDR = 8;       //触发位置
bit     PAGE = 0;             //分页显示指示
INT8U   PAGE_NUM = 0;         //当前页号
FP32    GATE_VALUE = 4.0;     //门限电平
INT8U   GATE_N = 0;           //门限设置通道   
INT16U  FREQ = 100;           //采样频率 

void InitIO()
{
	bit x;
	P0  = 0x00;
	P1  = 0x00;
	P2  = 0x00;
	ZLG7289INT = 1;
	IIC_INT    = 1;
	RAM_WE     = 0;
	RAM_OE     = 0;
	x = PCA8574_PutOne(0x40,0x00);
	x = PCA8574_PutOne(0x41,0x00);
	x = PCA8574_PutOne(0x42,0x00);
	x = PCA8574_PutOne(0x43,0xff);
	}

void main()
{
	bit x;
	INT8U key,i;
	INT32U temp=0;
	INT16U addr=0;
	INT8U  TX_Data;
	INT8U  tword[10]={0};
	InitIO();
	InitSerial();
	InitIIC();
	InitLCD();
	while(1)
	{
		//触发方式显示
		DispOneWord(0,0,0xB4A5); //"触"
		DispOneWord(0,1,0xB7A2); //"发"
		DispOneWord(0,2,0xB7BD); //"方"
		DispOneWord(0,3,0xCABD); //"式"
		if(TOUCH_MODE==SINGLE)
		{
			DispOneWord(0,5,0xB5A5); //"单"
			DispOneWord(0,6,0xB4CE); //"次"
			}
		else
		{
			DispOneWord(0,5,0xC8FD); //"三"
			DispOneWord(0,6,0xBCB6); //"级"
			}
		
		//触发位置显示
		DispOneWord(1,0,0xB4A5); //"触"
		DispOneWord(1,1,0xB7A2); //"发"
		DispOneWord(1,2,0xCEBC); //"位"
		DispOneWord(1,3,0xD6C3); //"置"
		DispTwoCharacter(1,5,NUM[TOUCH_ADDR/10],NUM[TOUCH_ADDR%10]);

		//页号显示
		DispOneWord(2,0,0xD2B3); //"页"
		DispOneWord(2,1,0xBAC5); //"号"
		DispTwoCharacter(2,4,NUM[PAGE_NUM/10],NUM[PAGE_NUM%10]);

		key=ZLG7289_ReadKey();   //取得按键数值
		switch(key)
		{
			case 1://复位
			   		{	TOUCH_MODE = SINGLE;
						TOUCH_WORD = 0x00;
						TOUCH_ADDR = 8;
						PAGE_NUM = 0; 
						PAGE = 0;
						GATE_VALUE = 4.0;
						FREQ = 100;
			    		break;}
		 	case 2://取消,删除
			   		{   temp >>=1;
						break;}
		 	case 3://确认
					{   TOUCH_WORD = temp;
					   	break;}
			case 4://分页显示
					{   PAGE=~PAGE;
					   	break;}
		 	case 5://页UP
				   	{	if(PAGE_NUM<10)PAGE_NUM++;
				        else PAGE_NUM=0;				   		
				   		break;}
		 	case 6://页DOWN
			   	 	{	if(PAGE_NUM>0)PAGE_NUM--;
				        else PAGE_NUM=10;				   		
				   		break;}
		 	case 7://采样频率
		       		{	if(FREQ<20000)FREQ++;
						else FREQ = 20;
			   			break;}
		 	case 8://门限电平通道选择
		       		{	if(GATE_N<7)GATE_N++;
						else GATE_N = 0;
			    		break;}
			case 9://门限电平+
		       		{	GATE_VALUE +=0.25;
			    		break;}
		 	case 10://门限电平-
		       		{	GATE_VALUE -=0.25;
			    		break;}
		 	case 11://触发位置
		       		{	if(TOUCH_ADDR<40)TOUCH_ADDR++;
						else TOUCH_ADDR = 0;
			    		break;}
			case 12://触发方式
		       		{	TOUCH_MODE=~TOUCH_MODE;
			    		break;}
		 	case 13://触发字设置
		       		{	TOUCH_SET = 1;
			    		break;}
		  	case 14://0
		       		{	temp <<= 1;
			   	 		break;}
		 	case 15://1
		       		{	temp = (temp<<1) + 1;
			    		break;}
		 	default:
					{	TOUCH_SET = 0;
			    		break;}
		while(!ZLG7289INT);
		}
		Set_NLogic(GATE_N,GATE_VALUE);
		addr = PAGE_NUM*40 + TOUCH_ADDR;
		RAM_CS = 1;
		RAM_WE = 1;
		RAM_ADDR_L = addr&0xff;
		RAM_ADDR_L = (addr>>8)&0xff;
		x=PCA8574_GetOne(0x43,TX_Data);
		x=PCA8574_PutOne(0x42,TX_Data); //LED指示
		RAM_CS = 0;
		RAM_WE = 0;
		Serial_TX(TX_Data);
		addr += 1;
 	    for(i=0;i<19;i++)
		{
			
			RAM_CS = 1;
			RAM_WE = 1;
			RAM_ADDR_L = addr&0xff;
			RAM_ADDR_L = (addr>>8)&0xff;
			x=PCA8574_GetOne(0x43,TX_Data);
			RAM_CS = 0;
			RAM_WE = 0;
			Serial_TX(TX_Data);
			addr += 1;
			}
		}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -