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

📄 12232.c

📁 点阵液晶12232驱动
💻 C
字号:
/*******************************************************************
		

	Module:   122x32 dots
	Controller:   SED1520

Address 0x0379 (Status Port) - Read Only Port, Not used
	 B7    B6   B5            B4    B3     B2    B1    B0
	Busy  Ack  Paper End  On Line  Error
25 Pin: 11    10   12         13         15
36 Pin: 11    10   12         13         32

Address 0x037A (Control Port) - Write Only Port, set PC
  PC7    PC6   PC5   PC4       PC3     PC2    PC1      PC0
Output Enable  IRQ Enable    /Select  Init  /AutoFd  /Strobe
25 Pin: - No Pin Connection-   17      16     14       1

Pin Assignment for this program :
	Gnd Vdd  V0  A0  R/W  E1  DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 E2  RES
25 Pin: 18  +5V      16  14   1    2   3   4   5   6   7   8  9   17  14


********************************************************************/

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <bios.h>
#include <stdlib.h>
#include <math.h>
#include "1520.fon"
#include "bmpa.ptr";
#include "12032.ptr"

#define 	pb    0x0378
#define		pc    0x037a

//control signal
#define		com_write	0x02
#define 	data_write	0x06
//commands
const
	disp_off    	=0xae,
	disp_on		=0xaf,
	start_line  	=0xc0,
	page_0		=0xb8,
	page_1      	=0xb9,
	page_2		=0xba,
	page_3      	=0xbb,
	col_addr  	=0x00,
	duty            =0xa9;


#define chip_A   0x01
#define chip_B   0x08

void comm_out(unsigned char, unsigned char,unsigned char);
void check_busy(void);
void init_lcd(unsigned char);
unsigned char G_Memory[4][128];

void comm_out(unsigned char set_c, unsigned char set_db, unsigned char IC)
{
	outportb(pc,set_c|IC);
	delay(0);
	outportb(pb,set_db);
	delay(0);
	outportb(pc,set_c);
	delay(0);
	outportb(pc,set_c|IC);
}

void check_busy(void)
{
  delay(0);
}

void init_lcd(unsigned char IC)
{
	check_busy();
	comm_out(com_write,disp_off,IC);
	check_busy();
	comm_out(com_write,disp_on,IC);
	check_busy();
	comm_out(com_write,start_line,IC);
	check_busy();
	comm_out(com_write,page_0,IC);
	check_busy();
	comm_out(com_write,col_addr,IC);
	check_busy();
	comm_out(com_write,duty,IC);

}

void Disp(int section)
{
	int i,page;

	init_lcd(chip_A);

	for(page=0;page<4;page++)
	 {
		check_busy();
		comm_out(com_write,0xb8+page,chip_A);
		check_busy();
		comm_out(com_write,col_addr,chip_A);

		for (i=0;i<section;i++)
		{
			check_busy();
			comm_out(data_write,G_Memory[page][i],chip_A);
		 }
	}

	init_lcd(chip_B);
	for(page=0;page<4;page++)
	 {
		check_busy();
		comm_out(com_write,0xb8+page,chip_B);

		for (i=section;i<section*2; i++)
		{
			check_busy();
			comm_out(com_write,col_addr+i-section,chip_B);
			check_busy();
			comm_out(data_write,G_Memory[page][i],chip_B);
	 }
	}

}


void read_in(unsigned char *ptr)
{
  int row,col;

  unsigned char temp;

		for(row=0;row<5;row++)
		 for(col=0;col<122;col++)
		 {
		  temp=*ptr++;
		  G_Memory[row][col]=temp;
		 }

}

void write_alt_1(void)
{
	int row,col;

	for(row=0;row<4;row++)
	 for(col=0;col<122;col++)
	  {  if(col%2==0)	 G_Memory[row][col]=0x55;
		  else  G_Memory[row][col]=0xaa;
	  }
  Disp(61);

  clrscr();
  printf("\nChecker Board Pattern 1");

}

void write_alt_2(void)
{
	int row,col;

	for(row=0;row<4;row++)
	 for(col=0;col<122;col++)
	  {  if(col%2==0)		G_Memory[row][col]=0xaa;
		  else  G_Memory[row][col]=0x55;
	  }
  Disp(61);

  clrscr();
  printf("\nChecker Board Pattern 2");

}

void clear(void)
{
	int row,col;

	for(row=0;row<4;row++)
	 for(col=0;col<122;col++)
		G_Memory[row][col]=0x00;
	Disp(61);

	clrscr();
	printf("\nAll OFF");
}

void write_all(void)
{
	int row,col;

	for(row=0;row<4;row++)
	 for(col=0;col<122;col++)
		G_Memory[row][col]=0xff;

	Disp(61);


	clrscr();
	 printf("\nALL On");
}

void write_bmp(unsigned char *ptr,int start)
{
	int row,col,h,i,page;
	unsigned char ch_temp;
	clear();
	clrscr();

	 for(page=0;page<4;page++)
	  for(row=0;row<8;row++)
		for (col=0;col<16;col++)
		{  ch_temp = ptr[start+col+row*16+page*128];
			ch_temp = ch_temp ^0xff;
			G_Memory[page][col*8]=G_Memory[page][col*8] +(ch_temp& 0x80)/128*pow(2,row);
			G_Memory[page][col*8+1]=G_Memory[page][col*8+1] + (ch_temp&0x40)/64*pow(2,row);
			G_Memory[page][col*8+2]=G_Memory[page][col*8+2] + (ch_temp&0x20)/32*pow(2,row);
			G_Memory[page][col*8+3]=G_Memory[page][col*8+3] + (ch_temp&0x10)/16*pow(2,row);
			G_Memory[page][col*8+4]=G_Memory[page][col*8+4] + (ch_temp&0x08)/8*pow(2,row);
			G_Memory[page][col*8+5]=G_Memory[page][col*8+5] + (ch_temp&0x04)/4*pow(2,row);
			G_Memory[page][col*8+6]=G_Memory[page][col*8+6] + (ch_temp&0x02)/2*pow(2,row);
			G_Memory[page][col*8+7]=G_Memory[page][col*8+7] + (ch_temp&0x01)*pow(2,row);
		  }

	Disp(61);

	clrscr();
	printf("\nVL Logo BMP");
}

void write_character(int row,int col,unsigned char *ptr)
{
	int i,count;
	unsigned char temp;

	count=col/20;
	count=(col%20)*6+count ;

	 for (i=0;i<5;i++)
	  {   temp=*ptr++;
			G_Memory[row][col/20+col%20*6+i]=temp;
			}
}


void write_frame(void)
{		int row,col;

		clear();

		for(row=0;row<4;row++)
		for(col=0;col<122;col++)
		{
		  if(col==0)	   G_Memory[row][col]=0xff;
		  else if(col==121) G_Memory[row][col]=0xff;
		  else if(col==47) G_Memory[row][col]=0xff;
		  else if(col==51) G_Memory[row][col]=0xff;
		  else if(row==0)  G_Memory[row][col]=0x01;
		  else if(row==3)  G_Memory[row][col]=0x80;

		}
	  Disp(61);

	  clrscr();
	  printf("\nConstruction Frame");
}


void write_text(void)
{
	  clear();
//1st row
	  write_character(0,0,font_5x8['A'-65]);
	  write_character(0,1,font_5x8['B'-65]);
	  write_character(0,2,font_5x8['C'-65]);
	  write_character(0,3,font_5x8['D'-65]);
	  write_character(0,4,font_5x8['E'-65]);
	  write_character(0,5,font_5x8['F'-65]);
	  write_character(0,6,font_5x8['G'-65]);
	  write_character(0,7,font_5x8['H'-65]);
	  write_character(0,8,font_5x8['I'-65]);
	  write_character(0,9,font_5x8['J'-65]);
	  write_character(0,10,font_5x8['K'-65]);
	  write_character(0,11,font_5x8['L'-65]);
	  write_character(0,12,font_5x8['I'-65]);
	  write_character(0,13,font_5x8['M'-65]);
	  write_character(0,14,font_5x8['N'-65]);
	  write_character(0,15,font_5x8['O'-65]);
	  write_character(0,16,font_5x8['P'-65]);

// 2nd row
	  write_character(1,0,font_5x8['Q'-65]);
	  write_character(1,1,font_5x8['R'-65]);
	  write_character(1,2,font_5x8['S'-65]);
	  write_character(1,3,font_5x8['T'-65]);
	  write_character(1,4,font_5x8['U'-65]);
	  write_character(1,5,font_5x8['V'-65]);
	  write_character(1,6,font_5x8['W'-65]);
	  write_character(1,7,font_5x8['X'-65]);
	  write_character(1,8,font_5x8['Y'-65]);
	  write_character(1,9,font_5x8['Z'-65]);
	  write_character(1,10,font_5x8['A'-65]);
	  write_character(1,11,font_5x8['B'-65]);
	  write_character(1,12,font_5x8['C'-65]);
	  write_character(1,13,font_5x8['D'-65]);
	  write_character(1,14,font_5x8['E'-65]);
	  write_character(1,15,font_5x8['F'-65]);
	  write_character(1,16,font_5x8['G'-65]);
//3rd row
	  write_character(2,0,font_5x8['H'-65]);
	  write_character(2,1,font_5x8['I'-65]);
	  write_character(2,2,font_5x8['J'-65]);
	  write_character(2,3,font_5x8['K'-65]);
	  write_character(2,4,font_5x8['L'-65]);
	  write_character(2,5,font_5x8['M'-65]);
	  write_character(2,6,font_5x8['O'-65]);
	  write_character(2,7,font_5x8['P'-65]);
	  write_character(2,8,font_5x8['Q'-65]);
	  write_character(2,9,font_5x8['R'-65]);
	  write_character(2,10,font_5x8['S'-65]);
	  write_character(2,11,font_5x8['T'-65]);
	  write_character(2,12,font_5x8['U'-65]);
	  write_character(2,13,font_5x8['V'-65]);
	  write_character(2,14,font_5x8['W'-65]);
	  write_character(2,15,font_5x8['X'-65]);
	  write_character(2,16,font_5x8['Y'-65]);
//4th row
	  write_character(3,0,font_5x8['Z'-65]);
	  write_character(3,1,font_5x8['A'-65]);
	  write_character(3,2,font_5x8['B'-65]);
	  write_character(3,3,font_5x8['C'-65]);
	  write_character(3,4,font_5x8['D'-65]);
	  write_character(3,5,font_5x8['E'-65]);
	  write_character(3,6,font_5x8['F'-65]);
	  write_character(3,7,font_5x8['G'-65]);
	  write_character(3,8,font_5x8['H'-65]);
	  write_character(3,9,font_5x8['I'-65]);
	  write_character(3,10,font_5x8['J'-65]);
	  write_character(3,11,font_5x8['H'-65]);
	  write_character(3,12,font_5x8['I'-65]);
	  write_character(3,13,font_5x8['J'-65]);
	  write_character(3,14,font_5x8['K'-65]);
	  write_character(3,15,font_5x8['L'-65]);
	  write_character(3,16,font_5x8['M'-65]);

		Disp(61);
	clrscr();
	printf("\nText Pattern 1");

}


int keypress(void)
{
	int j;
	j = getch();
	if (j == 27)
		return(1);
	else
		return(0);
}

void main (void)
{
	 int i=0;
	delay(100);

	do{
			init_lcd(chip_A);
			init_lcd(chip_B);

		write_frame();
		if (keypress() ==1)	break;

		init_lcd(chip_A);
		init_lcd(chip_B);

		write_text();
		if (keypress() ==1)	break;

		init_lcd(chip_A);
		init_lcd(chip_B);
		write_alt_1();
		if (keypress() ==1)	break;

		init_lcd(chip_A);
		init_lcd(chip_B);
		write_alt_2();
		if (keypress() ==1)	break;

		init_lcd(chip_A);
		init_lcd(chip_B);
		write_all();
		if (keypress() ==1)	break;

		init_lcd(chip_A);
		init_lcd(chip_B);
		clear();
		if (keypress() ==1)	break;
/*
		init_lcd(chip_A);
		init_lcd(chip_B);
		write_bmp((unsigned char *) &bmp12032[0],62+i);
		Disp(61);


		if (keypress() ==1)	break;
/*		clear();
		write_bmp((unsigned char *) &BMPA[0],92);
		Disp(61);

		if (keypress() ==1)	break;
  */

	}while (bioskey(1) != 283);
}

⌨️ 快捷键说明

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