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

📄 vterminal_bus_wave.c

📁 wq_vga.rar,系列C51列程
💻 C
字号:
//智能显示终端并行接口通信演示程序之一总线方式。
//仿真器需选择:"总线设置(Bus Option)"的"仅使用数据总线(Use XBus Only)"。
//

#include <reg51.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char

//定义P0口为数据线,P3.1, P3.2为控制线。
sbit	CS0	    =P3^1;      //片选信号 
sbit	PINT    =P3^2;      //触摸屏中断信号
uchar  Fcolor;                 //背景色
uchar  Bcolor;                 //前景色

//写一个数据子程序:
Write_Byte(uchar dc_data)
{
    uchar xdata DC;   //定义一个外部RAM变量
    uchar i;
    CS0 = 0;
	DC = dc_data;   //数据dc_data写到外部RAM(即LCD控制板)。
    CS0 = 1;
    //加入适当的空操作延时
	//当采用更高速的单片机时应加入更多的空操作延时
	//这里加上8个空操作延时,在AT89C51,22MHz下是完全没问题的。
    for(i=0;i<8;i++){}  
}

Lcd_Clr();
dis_wave(unsigned short x0,unsigned short y0,uchar con,unsigned short *p_data);

/********************************************
定义数据常量,这些数据在实际应用中一般由A/D转换器采样所得到。
这里的每一个字节代表一个Y轴坐标的大小即幅度。
**********************************************/
unsigned short code y_data1[110] = {
  0x0b,0x0b,0x0b,0x0b,0x0b,
  0x0b,0x0b,0x0b,0x0b,0x0b,
  0x0b,0x0b,0x0b,0x0b,0x0b,
  0x1c,0x1c,0x1c,0x1c,0x1c,
  0x1c,0x1c,0x1c,0x1c,0x1c,
  0x1c,0x1c,0x1c,0x1c,0x1c,
  0x1c,0x1c,0x1c,0x1c,0x1c,
  0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,
  0x50,0x50,0x50,0x50,0x50,
  0x50,0x50,0x50,0x50,0x50,
  0x50,0x50,0x50,0x50,0x50,
  0x50,0x50,0x50,0x50,0x50,
  0x50,0x50,0x50,0x50,0x50,
  0x48,0x46,0x44,0x42,0x40,
  0x3e,0x3c,0x3a,0x38,0x36,
  0x34,0x32,0x30,0x2e,0x2c,
  0x2a,0x28,0x26,0x24,0x22,
  0x20,0x1e,0x1c,0x1a,0x18,
  0x16,0x14,0x12,0x10,0x84
  };

unsigned short code y_data2[110] = {
  0x015e,0x015e,0x015e,0x015e,0x015e,
  0x015e,0x015e,0x015e,0x015e,0x015e,
  0x015e,0x015e,0x015e,0x015e,0x015e,
  0x015e,0x015e,0x015e,0x015e,0x015e,
  0x015e,0x015e,0x015e,0x015e,0x015e,
  0x015e,0x015e,0x015e,0x015e,0x015e,
  0x015e,0x015e,0x015e,0x015e,0x015e,
  0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,
  0x0084,0x0084,0x0084,0x0084,0x0084,
  0x0084,0x0084,0x0084,0x0084,0x0084,
  0x0084,0x0084,0x0084,0x0084,0x0084,
  0x0084,0x0084,0x0084,0x0084,0x0084,
  0x0084,0x0084,0x0084,0x0084,0x0084,
  0x48,0x46,0x44,0x42,0x40,
  0x3e,0x3c,0x3a,0x38,0x36,
  0x34,0x32,0x30,0x2e,0x2c,
  0x2a,0x28,0x26,0x24,0x22,
  0x20,0x1e,0x1c,0x1a,0x18,
  0x16,0x14,0x12,0x10,0xffff
  };

main(void)
{
  unsigned int i;

  CS0 = 0;
  PINT = 1;
  Fcolor = 0x0;
  Bcolor = 0xff;
  i = 0;

  //显示终端在上电就绪时发送F0.用仿真器时不要检测F0.
  //当把程序烧写到单片机上时,显示终端和单片机同时上电,所以一定
  //要检测是否收到F0。以判断显示终端是否上电就绪
  //while(!(i == 0xF0))
  //{i = Read_Byte();} 

  IT1 = 0;         //外部中断1为电平触发方式。    
  EA=1;            //全局中断使能,(EA=0,关全局中断;EA=1,开全局中断)
  EX1 = 1;          //外部中断使能置1,允许外部中断

  Lcd_Clr();     //清除全屏。
  Fcolor = 0xe0;
  dis_wave(0,0,1,y_data1);     //以 (0,0) 为坐标原点显示波形。幅度为单字节
  Fcolor = 0x1c;
  dis_wave(100,100,2,y_data2);    //以 (80,80) 为坐标原点显示波形。幅度为双字节。
  Fcolor = 0xff;
  while(1)
  {
  }
}

//指令头,每一条指令都规定为"0x81, command1,command2,Fcolor,Bcolor"
command_head(unsigned char command1,unsigned char command2)
{
   Write_Byte(0x81);
   Write_Byte(command1);
   Write_Byte(command2);
   Write_Byte(Fcolor);
   Write_Byte(Bcolor);
}

//清屏子程序
Lcd_Clr()
{
   command_head(0x43,0x4c);
   Write_Byte(0x84);
}
//显示波形子程序。
//显示波形的原理是:x轴从坐标原点开始自动加一,y轴(幅度)是*p_data。
//x0, y0是坐标原点。
//con=1 y轴(幅度)的大小用一个字节表示。con = 2:y轴(幅度)的大小用二个字节表示
dis_wave(unsigned short x0,unsigned short y0,uchar con,unsigned short *p_data)
{
   unsigned int i;
   command_head(0x53,0x53);
   Write_Byte(x0/100);
   Write_Byte(x0%100);
   Write_Byte(y0/100);
   Write_Byte(y0%100);
   Write_Byte(con);
 switch(con)
      {case 1:
   		   do
   		   {
      	    Write_Byte(*p_data%100);    //因为*p_data定义为short类型指针,所以这里要先取模运算
			p_data++;
   	  	   }
   		   while(*p_data !=0x84);
	    break;

		case 2:
		    do
			{
			 Write_Byte(*p_data/100);
			 Write_Byte(*p_data%100);
			 p_data++;
			}
			while(*p_data !=0xffff);   //这里不能定义为Ox84,因为p_data[x]有可能为0x84
		break;

		default: break;
	  }
   Write_Byte(0x84);
   for(i= 0;i<50;i++){}			      //特别注意:执行完这条指令后一定要延时至少0.1秒
}

⌨️ 快捷键说明

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