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

📄 systhree.c

📁 单片机小系统测试程序,在C++语言环境下实现测试单片机系统的程序。
💻 C
📖 第 1 页 / 共 3 页
字号:
               			case 0xf7:
                      		keynum = 0x03;
                 			break;
               			case 0xef:
                 			keynum = 0x04;
                 			break;
               			case 0xdf:
                 			keynum = 0x05;
                			break;
               			case 0xbf:
                			keynum = 0x06;
                 			break;
              	 		case 0x7f:
                 			keynum = 0x07;
                 			break;
              		}
           		}
         		else
           		{
            		second_row = 0;     //扫描第二行按键
            		first_row = 1;
            		M_key = KEY;
            		switch(M_key)
              		{
               			case 0xfe:
                			keynum = 0x08;
                			break;
               			case 0xfd:
                 			keynum = 0x09;
                 			break;
               			case 0xfb:
                 			keynum = 0x0a;
                 			break;
               			case 0xf7:
                 			keynum = 0x0b;
                 			break;
               			case 0xef:
                 			keynum = 0x0c;
                 			break;
               			case 0xdf:
                 			keynum = 0x0d;
                 			break;
               			case 0xbf:
                 			keynum = 0x0e;
                 			break;
               			case 0x7f:
                 			keynum = 0x0f;
                 			break;
              		}
           		}
				getkey = 1; //获得有效按键数值
                keyon = 1;  //防止按键冲突,当获得有效按键时将其置1
        	} 
     	} 
   	}
 	else
   	{
    		first_getkey = 0;
    		keyon = 0;     //防止按键冲突,当所有的按键都释放时将其清0
    }
}

/***************************************************
			数码管显示函数
原型:   void leddisp(void);
功能:  每次调用轮流显示一位数码管

****************************************************/
void leddisp(void)
{
	switch(lednum)  //选择需要显示的数码位
 	{
  		case 0:
    		LED1 = segtab[led[0]];
     		break;
  		case 1:
     		LED2 = segtab[led[1]];
     		break;
 		case 2:
     		LED3 = segtab[led[2]];
     		break;
 		case 3:
     		LED4 = segtab[led[3]];
     		break;
 		case 4:
     		LED5 = segtab[led[4]];
     		break;
 		case 5:
     		LED6 = segtab[led[5]];
     		break;
 		case 6:
     		LED7 = segtab[led[6]];
     		break;
		case 7:
     		LED8 = segtab[led[7]];
     		break;
  	}

	if(lednum == 0) //更新需要现实的数码位
 	{
		lednum = 7;
 	}
 	else
 	{
		lednum = lednum-1;
	}
}  

void lcdlon_off(uchar D)
{
	lcdlCommand = D;
	_nop_();
}

void setlstartx(uchar D)
{
	lcdlCommand = D;
	_nop_();
}

void setlstarty(uchar D)
{
	lcdlCommand = D;
	_nop_();
}

void setlstartline(uchar D)
{
	lcdlCommand = D;
	_nop_();
}

void lcdron_off(uchar D)
{
	lcdrCommand = D;
	_nop_();
}

void setrstartx(uchar D)
{
	lcdrCommand = D;
	_nop_();
}

void setrstarty(uchar D)
{
	lcdrCommand = D;
	_nop_();
}

void setrstartline(uchar D)
{
	lcdrCommand = D;
	_nop_();
}

uchar GetIndex(uchar szText)
{
    uchar code TAB[libleng] = {' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q'
							,'R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q'
							,'r','s','t','u','v','w','x','y','z','`','1','2','3','4','5','6','7','8','9','0','-','=','\\','~','!','@','#','$','%','^','&','*','(',')','_'
							,'+','|','[',']',';','\'',',','.','/','{','}',':','"','<','>','?'};
    uchar i;
	uchar j = 0;
    for(i=0;i<=libleng;i++)     
    {
	  	if(szText==TAB[i]) 
	     {
		 	j = 1;
		 	return i;
		 	break;
		}
	}
    if(j==0)
	{
	    return 0x00;
	}
}

void lcdlwrite(uchar D) 
{
	lcdDl = D;
	_nop_();
}

void lcdrwrite(uchar D) 
{
	lcdDr = D;
	_nop_();
}

void writelcd(void)        //对LCD进行字符串写入
{
	uchar i = 0;//8*8字符数
	uchar j = 0;//8位数据中第几位
	uchar k = 0;//行数
	uchar index = 0;
	uchar z = 0;
 	for(i=0;i<dataleng;i++)
   	{
   		index = GetIndex(worddata[i]);
  		z = i%8;
		k = i/16;
   		if(k>7)
	    {
			k = 0;
  	    }
   		if(i%16<8)
     	{ 
      		setlstartx(strat_xaddr+k);
      		for(j=0;j<8;j++)
	      	{
				_nop_();
		  		setlstarty(strat_yaddr+8*z+j);
		  		lcdlwrite(ASCII[index][j]);
	    	}
       		_nop_();
	  	}	
  		if(i%16>=8)
     	{
      		setrstartx(strat_xaddr+k);
      		for(j=0;j<8;j++)
	      	{
				_nop_();
		  		setrstarty(strat_yaddr+8*z+j);
		  		lcdrwrite(ASCII[index][j]);
	 	    }
      		_nop_();
	  	}
   	}
}

/**********************************************************
			LCD清屏
原型:  void clear_lcd(void);
功能: 将LCD清屏

**********************************************************/
void clear_lcd(void)
{
	uchar i,j;
	
	for(i=0;i<8;i++)
	{
		setlstartx(strat_xaddr + i);
		for(j=0;j<64;j++)
		{
			setlstarty(strat_yaddr+j);
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			lcdlwrite(0x00);
		}
		_nop_();
	}

	for(i=0;i<8;i++)
	{
		setrstartx(strat_xaddr + i);
		for(j=0;j<64;j++)
		{
			setrstarty(strat_yaddr+j);
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			lcdrwrite(0x00);
		}
		_nop_();
	}
}

/**********************************************************
			LCD填充
原型:  void full_lcd(void);
功能: 将LCD填充

**********************************************************/
void full_lcd(void)
{
	uchar i,j;
	
	for(i=0;i<8;i++)
	{
		setlstartx(strat_xaddr + i);
		for(j=0;j<64;j++)
		{
			setlstarty(strat_yaddr+j);
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			lcdlwrite(0xff);
		}
		_nop_();
	}

	for(i=0;i<8;i++)
	{
		setrstartx(strat_xaddr + i);
		for(j=0;j<64;j++)
		{
			setrstarty(strat_yaddr+j);
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			lcdrwrite(0xff);
		}
		_nop_();
	}
}

/************************************************************************************
			LCD初始化
原型:  void initial_lcd(void);
功能: 将LCD初始化显示"National University of defence technology's ASIC R&D Center"

************************************************************************************/
void initial_lcd(void)
{
	
	setlstartline(strat_dispaddr);//设置显示初始行
	setrstartline(strat_dispaddr);
	lcdlon_off(0x3F);//LCD两屏都打开
 	lcdron_off(0x3F);  
	writelcd();//写数据	
}

/**************************************************************************************
                    测试RAM函数              
函数原型: void check_ram(void);  
功能:     向61256的全部存储单元写0x00、0xff并读回,出错单元的数量使用数码管的后五位显示
  
***************************************************************************************/

void check_ram(void)
{
	uint16 ram_count = 0;
	uint16 ram_error = 0;
	uint8 ram_data1 = 0;
	uint8 ram_data2 = 0;

	for(ram_count = 0;ram_count < 32768;ram_count++)
	{
		RAM[ram_count] = 0x00;
		ram_data1 = RAM[ram_count];
		RAM[ram_count] = 0xff;
		ram_data2 = RAM[ram_count];
		if((ram_data1 != 0x00) || (ram_data2 != 0xff))
		{
			ram_error = ram_error + 1;
		}
	}
	if(ram_error != 0)
	{
		for(ram_data1 = 0;ram_data1 < 5;ram_data1++)
		{
			if(ram_error != 0)
			{	
				led[ram_data1] = ram_error % 10;
				ram_error = ram_error / 10;
			}
			else
			{
				led[ram_data1] = 0xff;
			}
		}
	}
	else 
	{
		led[0] = 0x00;
		led[1] = 0x11;

⌨️ 快捷键说明

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