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

📄 kk.c

📁 在12864点阵的LCD上写一个可以显示框框的程序(源代码)
💻 C
字号:
#include <reg52.h> 
#include <intrins.h>
//#include <kk.h>


//定义与 ADC 有关的特殊功能寄存器
sfr P1_ADC_EN = 0x97;               // A/D 转换功能允许寄存器
sfr ADC_CONTR = 0xC5;               // A/D 转换控制寄存器
sfr ADC_DATA  = 0xC6;               // A/D 转换结果寄存器

sbit LCD_CS1  =P3^3;                //sbit 数据类型 值域 0/1
sbit LCD_RST  =P3^4;
sbit LCD_RS1  =P3^5;
sbit LCD_WR1  =P3^6;
sbit LCD_RD1  =P3^7;

//#define DATAL P1
#define lcd_data P0

unsigned char contrst=0x31;//初始化
void delay_us(char us_value);
void delay_ms(unsigned int ms_value);
void init_RS232 (void);
void Send_Byte(char one_byte);
unsigned char get_AD_result(unsigned char channel);
unsigned char key_dowith(void);
void init_cpu(void);
void init_lcd(void);
void wr_cmd(unsigned char wrcmd);
void wr_data(unsigned char wrdata);
void disp_all(unsigned char value);
//-----------------------------------------------------------------------------
//=============================================================================
//-----------------------------------------------------------------------------



void init_RS232 (void)          	// 串口初始化
{
    ES = 0;                         // 禁止串口中断
    SCON = 0x50;                    // 0101,0000  8位数据位, 无奇偶校验
    T2CON = 0x34;                   // 0011,0100, 由T2作为波特率发生器
    RCAP2H = 0xFF;                  // 时钟11.0592MHz,  9600 波特率
    RCAP2L = 0xDB;
    ES = 1;                         // 允许串口中断
}
//-----------------------------------------------------------------------------
void Send_Byte(char one_byte)      // 发送一个字节
{
    TI = 0;                         // 清零串口发送中断标志
    SBUF = one_byte;
    while (TI == 0);
    TI = 0;                         // 清零串口发送中断标志
}
//-----------------------------------------------------------------------------
unsigned char get_AD_result(unsigned char channel)
{
	unsigned char AD_finished = 0; 	// 存储 A/D 转换标志

	ADC_DATA =  0;
	ADC_CONTR  = channel; 			//选择 A/D 当前通道
	delay_us(1); 				//使输入电压达到稳定
	ADC_CONTR |= 0x08; 			//0000,1000 令 ADC_START = 1, 启动A/D转换
	AD_finished = 0;
	while ( AD_finished == 0 ) //等待A/D转换结束
	{
      	AD_finished = (ADC_CONTR & 0x10);  //0001,0000, ADC_FLAG ==1 测试A/D转换结束否
	}
	ADC_CONTR &= 0xF7;                  //1111,0111 令 ADC_START = 0, 关闭A/D转换,
	return (ADC_DATA);   // 返回 A/D 转换结果
}
//-----------------------------------------------------------------------------

//=============================================================================
void delay_us(char us_value)	//delay about 1 us
{
	while(us_value--)
	{
		_nop_();
		_nop_();
		_nop_();
	}
}
//-----------------------------------------------------------------------------
void delay_ms(unsigned int ms_value)	//delay about 1 ms
{
	unsigned int k;

	for(k=0;k<ms_value;k++)
	{
		delay_us(200);
	}
}
//-----------------------------------------------------------------------------
void init_cpu()	//Initial 89C52
{
      delay_ms(5);
      lcd_data=0x00;
	LCD_RST = 0;
	LCD_CS1 = 1;
	LCD_RS1 = 0;
	LCD_WR1 = 1;
	LCD_RD1 = 1;
      delay_ms(5);
	LCD_RST = 1;
	delay_ms(50);
}
//-----------------------------------------------------------------------------
void wr_cmd(unsigned char wrcmd)
{
      LCD_RS1 = 0;      //select instruction
	LCD_CS1 = 0;
	lcd_data=wrcmd;      
	LCD_WR1 = 0;
      //delay_us(1);
	LCD_WR1 = 1;
      //delay_us(1);
	LCD_CS1 = 1;
	//delay_us(1);
	
}
//-----------------------------------------------------------------------------
void wr_data(unsigned char wrdata)
{
      LCD_RS1 = 1;      //select instruction
	LCD_CS1 = 0;
	lcd_data=wrdata;      
	LCD_WR1 = 0;
      //delay_us(1);
	LCD_WR1 = 1;
      //delay_us(1);
	LCD_CS1 = 1;
	//delay_us(1);
}
//-----------------------------------------------------------------------------
void disp_all(unsigned char value)
{
	unsigned char ii,jj;

	for(ii=0;ii<8;ii++)
	{
		wr_cmd(0xb0+ii);
		wr_cmd(0x10);
		wr_cmd(0x00);
		for(jj=0;jj<128;jj++)
			wr_data(value);
	}
}
//=====================================================================================
void init_lcd(void)
{

      wr_cmd(0xaf);	//dispaly on
	delay_ms(1);
	wr_cmd(0xa4);	//EON=0,normal display
	wr_cmd(0xa6);	//REV=0,normal display
	wr_cmd(0xa0);	//ADC=0,SEG0->SEG131
	wr_cmd(0x40);	//Initial display line for COM0
	wr_cmd(0xc8);	//SHL select,COM63->COM0
	delay_us(1);
      wr_cmd(0x01);
	wr_cmd(0x81);	//SET Register
	wr_cmd(contrst);

	delay_us(1);
	wr_cmd(0xa3);	//SET BIAS
	delay_us(1);
	wr_cmd(0x2f);
	delay_ms(1);
	
}
//============================================================================

//-----------------------------------------------------------------------------
//#define charlen 128
void show_contrst()
{

    //unsigned char i,j;
      wr_cmd(0xb4);
	wr_cmd(0x13);
	wr_cmd(0x0d);
    
	delay_ms(200);
}
//----------------------------------------------------------------------------------

void main(void)
{
      disp_all(0x00);
	delay_us(10);
	init_cpu();
	init_lcd();
	init_RS232();
	wr_cmd(0x81);
	wr_cmd(contrst);
	delay_us(2);
	show_contrst();
      disp_all(0xff);	
}
//----------------------------------------------------------------------------------

⌨️ 快捷键说明

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