📄 kk.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 + -