TCRT5000漫反射STC15F204EA AD转换

TRCT5000漫反射实验

TCRT5000是一种红外线传感器模块,也被称为寻迹模块。它由一个红外线发射器和一个红外线接收器组成。发射器发射出红外线信号,接收器接收到被反射的红外线信号。通过检测接收器接收到的红外线信号强度变化,可以判断是否有物体遮挡在传感器前方,从而实现寻迹功能。

STC单片机AD转换寄存器定义

中断方式例程

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译

//若无特别说明,工作频率一般为11.0592MHz

#include "reg51.h"

#include "intrins.h"

#define FOSC 11059200UL

#define BAUD 115200

typedef unsigned char BYTE;

typedef unsigned int WORD;

#define URMD 0 //0:使用定时器2作为波特率发生器

//1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器

//2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器

sfr T2H = 0xd6; //定时器2高8位

sfr T2L = 0xd7; //定时器2低8位

sfr P1M1 = 0x91; //PxM1.n,PxM0.n =00--->Standard, 01--->push-pull

sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain

sfr P0M1 = 0x93;

sfr P0M0 = 0x94;

sfr P2M1 = 0x95;

sfr P2M0 = 0x96;

sfr P3M1 = 0xB1;

sfr P3M0 = 0xB2;

sfr P4M1 = 0xB3;

sfr P4M0 = 0xB4;

sfr P5M1 = 0xC9;

sfr P5M0 = 0xCA;

sfr P6M1 = 0xCB;

sfr P6M0 = 0xCC;

sfr P7M1 = 0xE1;

sfr P7M0 = 0xE2;

sfr AUXR = 0x8e; //辅助寄存器

sfr ADC_CONTR = 0xBC; //ADC控制寄存器

sfr ADC_RES = 0xBD; //ADC高8位结果

sfr ADC_LOW2 = 0xBE; //ADC低2位结果

sfr P1ASF = 0x9D; //P1口第2功能控制寄存器

#define ADC_POWER 0x80 //ADC电源控制位

#define ADC_FLAG 0x10 //ADC完成标志

#define ADC_START 0x08 //ADC起始控制位

#define ADC_SPEEDLL 0x00 //540个时钟

#define ADC_SPEEDL 0x20 //360个时钟

#define ADC_SPEEDH 0x40 //180个时钟

#define ADC_SPEEDHH 0x60 //90个时钟

void InitUart();

void SendData(BYTE dat);

void Delay(WORD n);

void InitADC();

BYTE ch = 0; //ADC通道号

void main()

{

P0M0 = 0x00;

P0M1 = 0x00;

P1M0 = 0x00;

P1M1 = 0x00;

P2M0 = 0x00;

P2M1 = 0x00;

P3M0 = 0x00;

P3M1 = 0x00;

P4M0 = 0x00;

P4M1 = 0x00;

P5M0 = 0x00;

P5M1 = 0x00;

P6M0 = 0x00;

P6M1 = 0x00;

P7M0 = 0x00;

P7M1 = 0x00;

InitUart(); //初始化串口

InitADC(); //初始化ADC

IE = 0xa0; //使能ADC中断

//开始AD转换

while (1);

}

/*----------------------------

ADC中断服务程序

----------------------------*/

void adc_isr() interrupt 5

{

ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志

SendData(ch); //显示通道号

SendData(ADC_RES); //读取高8位结果并发送到串口

// SendData(ADC_LOW2); //显示低2位结果

if (++ch > 7) ch = 0; //切换到下一个通道

ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;

}

/*----------------------------

初始化ADC

----------------------------*/

void InitADC()

{

P1ASF = 0xff; //设置P1口为AD口

ADC_RES = 0; //清除结果寄存器

ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;

Delay(2); //ADC上电并延时

}

/*----------------------------

初始化串口

----------------------------*/

void InitUart()

{

SCON = 0x5a; //设置串口为8位可变波特率

#if URMD == 0

T2L = (65536 - (FOSC/4/BAUD));

T2H = (65536 - (FOSC/4/BAUD)) >> 8;

AUXR = 0x14; //T2为1T模式, 并启动定时器2

AUXR |= 0x01; //选择定时器2为串口1的波特率发生器

#elif URMD == 1

AUXR = 0x40; //定时器1为1T模式

TMOD = 0x00; //定时器1为模式0(16位自动重载)

TL1 = (65536 - (FOSC/4/BAUD));

TH1 = (65536 - (FOSC/4/BAUD)) >> 8;

TR1 = 1; //定时器1开始启动

#else

TMOD = 0x20; //设置定时器1为8位自动重装载模式

AUXR = 0x40; //定时器1为1T模式

TH1 = TL1 = (256 - (FOSC/32/BAUD));

TR1 = 1;

#endif

}

/*----------------------------

发送串口数据

----------------------------*/

void SendData(BYTE dat)

{

while (!TI); //等待前一个数据发送完成

TI = 0; //清除发送标志

SBUF = dat; //发送当前数据

}

/*----------------------------

软件延时

----------------------------*/

void Delay(WORD n)

{

WORD x;

while (n--)

{

x = 5000;

while (x--);

}

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

查询方式例程

#include "reg51.h"

#include "intrins.h"

#define FOSC 11059200L

#define BAUD 115200

typedef unsigned char BYTE;

typedef unsigned int WORD;

#define URMD 0 //0:使用定时器2作为波特率发生器

//1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器

//2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器

sfr T2H = 0xd6; //定时器2高8位

sfr T2L = 0xd7; //定时器2低8位

sfr P1M1 = 0x91; //PxM1.n,PxM0.n =00--->Standard, 01--->push-pull

sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain

sfr P0M1 = 0x93;

sfr P0M0 = 0x94;

sfr P2M1 = 0x95;

sfr P2M0 = 0x96;

sfr P3M1 = 0xB1;

sfr P3M0 = 0xB2;

sfr P4M1 = 0xB3;

sfr P4M0 = 0xB4;

sfr P5M1 = 0xC9;

sfr P5M0 = 0xCA;

sfr P6M1 = 0xCB;

sfr P6M0 = 0xCC;

sfr P7M1 = 0xE1;

sfr P7M0 = 0xE2;

sfr AUXR = 0x8e; //辅助寄存器

sfr ADC_CONTR = 0xBC; //ADC控制寄存器

sfr ADC_RES = 0xBD; //ADC高8位结果

sfr ADC_LOW2 = 0xBE; //ADC低2位结果

sfr P1ASF = 0x9D; //P1口第2功能控制寄存器

#define ADC_POWER 0x80 //ADC电源控制位

#define ADC_FLAG 0x10 //ADC完成标志

#define ADC_START 0x08 //ADC起始控制位

#define ADC_SPEEDLL 0x00 //540个时钟

#define ADC_SPEEDL 0x20 //360个时钟

#define ADC_SPEEDH 0x40 //180个时钟

#define ADC_SPEEDHH 0x60 //90个时钟

void InitUart();

void InitADC();

void SendData(BYTE dat);

BYTE GetADCResult(BYTE ch);

void Delay(WORD n);

void ShowResult(BYTE ch);

void main()

{

P0M0 = 0x00;

P0M1 = 0x00;

P1M0 = 0x00;

P1M1 = 0x00;

P2M0 = 0x00;

P2M1 = 0x00;

P3M0 = 0x00;

P3M1 = 0x00;

P4M0 = 0x00;

P4M1 = 0x00;

P5M0 = 0x00;

P5M1 = 0x00;

P6M0 = 0x00;

P6M1 = 0x00;

P7M0 = 0x00;

P7M1 = 0x00;

InitUart(); //初始化串口

InitADC(); //初始化ADC

while (1)

{

ShowResult(0); //显示通道0

ShowResult(1); //显示通道1

ShowResult(2); //显示通道2

ShowResult(3); //显示通道3

ShowResult(4); //显示通道4

ShowResult(5); //显示通道5

ShowResult(6); //显示通道6

ShowResult(7); //显示通道7

}

}

/*----------------------------

发送ADC结果到PC

----------------------------*/

void ShowResult(BYTE ch)

{

SendData(ch); //显示通道号

SendData(GetADCResult(ch)); //显示ADC高8位结果

// SendData(ADC_LOW2); //显示低2位结果

}

/*----------------------------

读取ADC结果

----------------------------*/

BYTE GetADCResult(BYTE ch)

{

ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;

nop(); //等待4个NOP

nop();

nop();

nop();

while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成

ADC_CONTR &= ~ADC_FLAG; //Close ADC

return ADC_RES; //返回ADC结果

}

/*----------------------------

初始化串口

----------------------------*/

void InitUart()

{

SCON = 0x5a; //设置串口为8位可变波特率

#if URMD == 0

T2L = (65536 - (FOSC/4/BAUD));

T2H = (65536 - (FOSC/4/BAUD)) >> 8;

AUXR = 0x14; //T2为1T模式, 并启动定时器2

AUXR |= 0x01; //选择定时器2为串口1的波特率发生器

#elif URMD == 1

AUXR = 0x40; //定时器1为1T模式

TMOD = 0x00; //定时器1为模式0(16位自动重载)

TL1 = (65536 - (FOSC/4/BAUD));

TH1 = (65536 - (FOSC/4/BAUD)) >> 8;

TR1 = 1; //定时器1开始启动

#else

TMOD = 0x20; //设置定时器1为8位自动重装载模式

AUXR = 0x40; //定时器1为1T模式

TH1 = TL1 = (256 - (FOSC/32/BAUD));

TR1 = 1;

#endif

}

/*----------------------------

初始化ADC

----------------------------*/

void InitADC()

{

P1ASF = 0xff; //设置P1口为AD口

ADC_RES = 0; //清除结果寄存器

ADC_CONTR = ADC_POWER | ADC_SPEEDLL;

Delay(2); //ADC上电并延时

}

/*----------------------------

发送串口数据

----------------------------*/

void SendData(BYTE dat)

{

while (!TI); //等待前一个数据发送完成

TI = 0; //清除发送标志

SBUF = dat; //发送当前数据

}

/*----------------------------

软件延时

----------------------------*/

void Delay(WORD n)

{

WORD x;

while (n--)

{

x = 5000;

while (x--);

}

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

调试通过 P1.2 P1.3

/************2026 2 20 09:18 L510 CODE 2549**********/

/*****TRCT 5000测试 OLED显示 测试*****/

#include "reg52.h" //取字库代码显示界面

#include "intrins.h" //连续EEPROM地址写FM24C64文字

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

#define IAP_ADDRESS 0x0000 //EEPROM首地址

sbit OUT_A=P1^4; //运行指示

sbit OUT_B=P1^5; //运行指示

sbit OUT_C=P1^6; //运行指示

sbit OUT_D=P1^7; //运行指示

sbit BEEP=P1^0; //蜂鸣器

sbit KEY_ADD=P3^2; //按键1

sbit KEY_DEC=P3^3; //按键2

typedef uchar BYTE; //

typedef uint WORD; //

uchar aa;

uchar time;

uchar kcounter,kstatus; //按键计数标志 按键状态标志

uchar counter,status; //按键计数标志 按键状态标志

bdata char com_data; /****暂用 ****/

#define high 1

#define low 0

uchar DAT2=0;

bit RunFlag;

bit TestFlag;

bit Signauto=0; /*退出循环检测*/

sfr P1ASF=0x9D; //P1口第2功能控制寄存器

float ADvalue; //存放AD转换返回的结果

/********0--A字符表***阴码 逆向 列行式 十六进制 C51格式**********************/

unsigned char code show1[]=

{

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"1",1*/

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*"3",3*/

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*"4",4*/

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"6",6*/

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*"7",7*/

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/

0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,/*"A",10*/

0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,/*"B",11*/

0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,/*"C",12*/

0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",13*/

0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,/*"E",14*/

0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,/*"F",15*/

};

unsigned char code show2[]=

{

0x00,0x00,0x24,0x24,0x24,0x24,0x24,0xFC,0x22,0x22,0x22,0x23,0x22,0x00,0x00,0x00,

0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*"手",0*/

0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00,

0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00,/*"动",1*/

0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,/*"自",2*/

0x00,0x10,0x88,0xC4,0x33,0x40,0x48,0x48,0x48,0x7F,0x48,0xC8,0x48,0x48,0x40,0x00,

0x02,0x01,0x00,0xFF,0x00,0x02,0x0A,0x32,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x00,/*"待",3*/

0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,

0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,/*"机",4*/

0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,

0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,/*"电",5*/

0x00,0x00,0xFE,0x02,0x82,0x82,0x82,0x82,0xFA,0x82,0x82,0x82,0x82,0x82,0x02,0x00,

0x80,0x60,0x1F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x44,0x58,0x40,0x40,0x00,/*"压",6*/

};

/*************Pin Define***************/

sbit OLED_SCL=P3^0; //408AS

sbit OLED_SDA=P3^1; //408AS

void Initial_LY096BG30();

void Delay_50ms(unsigned int Del_50ms);

void fill_picture(unsigned char fill_Data);

void IIC_Start();

void IIC_Stop();

void Write_IIC_Command(unsigned char IIC_Command);

void Write_IIC_Data(unsigned char IIC_Data);

bit Write_IIC_Byte(unsigned char IIC_Byte);

void dis_Value(uchar s);

/**************Delay*******************************/

void Delay_50ms(unsigned int Del_50ms) //

{

unsigned int m;

for(;Del_50ms>0;Del_50ms--)

for(m=62450;m>0;m--);

}

/*---------------延时子程序----------------*/

void delay1 (uint ms)

{

uint i,j;

for(i=0;i<ms;i++)

for(j=0;j<200;j++)

;

}

/************按键计数器状态寄存器归零************/

void key_reset()

{

kcounter=0; //计数器归零

kstatus=0; //状态计数器归零

delay1(5);

}

/************按键计数器状态寄存器加一************/

void Key_ValAdd()

{

kcounter++; //按键计数器加一

kstatus++; //按键状态标志加一

delay1(5);

}

/***********按键计数器加一状态寄存器归零*********/

void Key_Clear()

{

kcounter++; //按键计数器加一

kstatus=0; //按键状态标志归零

}

/*******************IIC Start******************/

void IIC_Start()

{

OLED_SCL=high;

//Delay_us(1);

OLED_SDA=high;

nop();

OLED_SDA=low;

nop();nop();

OLED_SCL=low;

}

/*************IIC Stop*************************/

void IIC_Stop()

{

OLED_SDA=low;

nop();

OLED_SCL=high;

nop();nop();

OLED_SDA=high;

}

/*****************IIC Write byte***************/

bit Write_IIC_Byte(unsigned char IIC_Byte)

{

unsigned char i;

bit Ack_Bit; //应答信号

for(i=0;i<8;i++)

{

if(IIC_Byte & 0x80) //1?0?

OLED_SDA=high;

else

OLED_SDA=low;

//Delay_us(1);

OLED_SCL=high;

nop();nop();

OLED_SCL=low;

//Delay_us(1);

IIC_Byte<<=1; //loop

}

OLED_SDA=high; //释放IIC SDA总线为主器件接收从器件产生应答信号

nop();nop();

OLED_SCL=high; //第9个时钟周期

nop();nop();

Ack_Bit=OLED_SDA; //读取应答信号

OLED_SCL=low;

return Ack_Bit;

}

/*************IIC Write Command*****************/

void Write_IIC_Command(unsigned char IIC_Command)

{

IIC_Start();

Write_IIC_Byte(0x78); //Slave address,SA0=0

Write_IIC_Byte(0x00); //write command

Write_IIC_Byte(IIC_Command);

IIC_Stop();

}

/****************IIC Write Data*****************/

void Write_IIC_Data(uchar IIC_Data)

{

IIC_Start();

Write_IIC_Byte(0x78);

Write_IIC_Byte(0x40); //write data

Write_IIC_Byte(IIC_Data);

IIC_Stop();

}

/********************picture**********************/

void cleardisp()

{

uchar x,y;

for(y=0;y<8;y++)

{

Write_IIC_Command(0xb0+y);

Write_IIC_Command(0x00);

Write_IIC_Command(0x10);

for(x=0;x<128;x++) //横向像素

{

Write_IIC_Data(0X00);

}

}

}

/***********************Initial code*********************/

void Initial_LY096BG30()

{

Write_IIC_Command(0xAE); //display off

Write_IIC_Command(0x20); //Set Memory Addressing Mode

Write_IIC_Command(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid

Write_IIC_Command(0xb0); //Set Page Start Address for Page Addressing Mode,0-7

Write_IIC_Command(0xc8); //Set COM Output Scan Direction

Write_IIC_Command(0x00); //---set low column address

Write_IIC_Command(0x10); //---set high column address

Write_IIC_Command(0x40); //--set start line address

Write_IIC_Command(0x81); //--set contrast control register

Write_IIC_Command(0x7f);

Write_IIC_Command(0xa1); //--set segment re-map 0 to 127

Write_IIC_Command(0xa6); //--set normal display

Write_IIC_Command(0xa8); //--set multiplex ratio(1 to 64)

Write_IIC_Command(0x3F); //

Write_IIC_Command(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content

Write_IIC_Command(0xd3); //-set display offset

Write_IIC_Command(0x00); //-not offset

Write_IIC_Command(0xd5); //--set display clock divide ratio/oscillator frequency

Write_IIC_Command(0xf0); //--set divide ratio

Write_IIC_Command(0xd9); //--set pre-charge period

Write_IIC_Command(0x22); //

Write_IIC_Command(0xda); //--set com pins hardware configuration

Write_IIC_Command(0x12);

Write_IIC_Command(0xdb); //--set vcomh

Write_IIC_Command(0x20); //0x20,0.77xVcc

Write_IIC_Command(0x8d); //--set DC-DC enable

Write_IIC_Command(0x14); //

Write_IIC_Command(0xaf); //--turn on oled panel

}

/*************关所有输出*******************************/

void reset_io()

{

P0M0=0X00;

P0M1=0X00;

P1M0=0X00;

P1M1=0X00;

P3M0=0X00;

P3M1=0X00;

OUT_A=1; //提升链板

OUT_B=1; //输送带

OUT_C=1; //提升链板

OUT_D=1; //输送带

}

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

void DisModel() //显示手动

{

uchar x,y;

uint i=0;

uint Cnt=32;

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 手

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show2[x+y*16+Cnt*0]); //字符表第1个字

}

}

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

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 动

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show2[x+y*16+Cnt*1]); //字符表第1个字

}

}

/**************第二行****************************/

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行 电

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show2[x+y*16+Cnt*5]); //字符表第1个字

}

}

/**************第二行****************************/

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第一行 压

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show2[x+y*16+Cnt*6]); //字符表第1个字

}

}

/**************第三行****************************/

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第一行 电

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show2[x+y*16+Cnt*5]); //字符表第1个字

}

}

/**************第三行****************************/

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb2+y); //竖向第一行 压

Write_IIC_Command(0x00);

Write_IIC_Command(0x11); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show2[x+y*16+Cnt*6]); //字符表第1个字

}

}

}

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

void Disval(uchar ss) //显示运行位

{

uchar x,y;

uint i=0;

uint Cnt=16;

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb4+y); //竖向第一行 2

Write_IIC_Command(0x00);

Write_IIC_Command(0x10); //横向第一个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+Cnt*ss]); //字符表第1个字

}

}

}

/**************在x1,y1地址显示ss数值********/

void Dis_data(uchar ss,st,x1,y1) //显示

{

uchar x,y;

uint i=0;

uint Cnt=16;

for(y=0;y<2;y++)

{

Write_IIC_Command(y1+y); //竖向第一行 2

Write_IIC_Command(0x00);

Write_IIC_Command(x1); //横向第一个字

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+Cnt*ss]); //字符表第1个字

}

for(x=0;x<8;x++) //横向像素

{

Write_IIC_Data(show1[x+y*8+Cnt*st]); //字符表第1个字

}

}

}

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

void Diswait() //显示待机

{

uchar x,y;

uint i=0;

uint Cnt=32;

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 待

Write_IIC_Command(0x00);

Write_IIC_Command(0x15); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(0X00); //字符表第1个字

}

}

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 待

Write_IIC_Command(0x00);

Write_IIC_Command(0x16); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show2[x+y*16+Cnt*3]); //字符表第1个字

}

}

for(y=0;y<2;y++)

{

Write_IIC_Command(0xb0+y); //竖向第一行 机

Write_IIC_Command(0x00);

Write_IIC_Command(0x17); //横向第一个字

for(x=0;x<16;x++) //横向像素

{

Write_IIC_Data(show2[x+y*16+Cnt*4]); //字符表第1个字

}

}

}

/**************显示A函数***********************/

void dis_play1(uint val) /*显示A函数*/

{

uint Data_a,Data_b,Data_c,Data_d;

Data_a=val/1000;

Data_b=(val-Data_a*1000)/100;

Data_c=(val-Data_a*1000-Data_b*100)/10;

Data_d=val-Data_a*1000-Data_b*100-Data_c*10;

Dis_data(Data_a,Data_b,0x15,0XB2);

Dis_data(Data_c,Data_d,0x16,0XB2);

}

/***************显示B函数**********************/

void dis_play2(uint val) /*显示B函数*/

{

uint Data_a,Data_b,Data_c,Data_d;

Data_a=val/1000;

Data_b=(val-Data_a*1000)/100;

Data_c=(val-Data_a*1000-Data_b*100)/10;

Data_d=val-Data_a*1000-Data_b*100-Data_c*10;

Dis_data(Data_a,Data_b,0x15,0XB4);

Dis_data(Data_c,Data_d,0x16,0XB4);

}

/**************P12 AD转换****************************/

unsigned int ADC_P12() //

{

uint i;

uchar status=0; //AD转换结束标志

uint AD_Dat=0; //10位AD转换值

ADC_CONTR|=0X80; //打开ADC转换电源,第一次使用时要打开内部电源

for(i=0;i<10000;i++) //等待电源稳定1ms

P1ASF|=0X04; //0000 0100 P1.2脚位选择寄存器

ADC_CONTR=0XE2; //1110 (0010 P1.2) 通道P1.2

//for(i=0;i<1000;i++) //如果多通道测量,更换通道后延时200us

ADC_CONTR|=0X08; //启动AD转换 0000 1000ADC_START

while(status==0) //等待AD转换结束

{

status=ADC_CONTR&0X10; //判断ADC_FLAG是否等于1,

}

ADC_CONTR&=0XE7; //将ADC_FLAG清零

AD_Dat=(ADC_RES<<2)|(ADC_RESL&0X03);//高八位左移两位和低两位相或

return AD_Dat; //

}

/**************P13 AD转换***************************/

unsigned int ADC_P13() //

{

uint i;

uchar status=0; //AD转换结束标志

uint AD_Dat=0; //10位AD转换值

ADC_CONTR|=0X80; //打开ADC转换电源,第一次使用时要打开内部电源

for(i=0;i<10000;i++) //等待电源稳定1ms

P1ASF|=0X08; //0000 1000 P1.3

ADC_CONTR=0XE3; //1110 (0011 P1.3) 通道P1.3

//for(i=0;i<1000;i++) //如果多通道测量,更换通道后延时200us

ADC_CONTR|=0X08; //启动AD转换

while(status==0) //等待AD转换结束

{

status=ADC_CONTR&0X10; //判断ADC_FLAG是否等于1,

}

ADC_CONTR&=0XE7; //将ADC_FLAG清零

AD_Dat=(ADC_RES<<2)|(ADC_RESL&0X03);//高八位左移两位和低两位相或

return AD_Dat; //

}

/**************定时中断*************************/

void timer0() interrupt 1

{

aa++; //timeA

if(aa>=100)

{

aa=0;

BEEP=~BEEP;

}

}

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

void main(void) //

{

P1M0=0X00;

P1M1=0X00;

P3M0=0X00;

P3M1=0X00;

P5M0=0X00;

P5M1=0X00;

Initial_LY096BG30(); //初始化显示屏

cleardisp();

reset_io();

Delay_50ms(2);

delay1(2);

DisModel();

Diswait();

Disval(1);

AUXR |= 0x80; //定时器时钟1T模式

TMOD &= 0xF0; //设置定时器模式

TL0 = 0xA0; //设置定时初始值 5mS 12MHZ

TH0 = 0x15; //设置定时初始值 5mS 12MHZ

TF0 = 0; //清除TF0标志

TR0 = 1; //定时器0开始计时

EA=1;

ET0=1;

time=80; //

while(1)

{

ADvalue=ADC_P12()/9; //采样P1.1口模拟输入电压 9根据输入电压,芯片电压测试得出

dis_play1(ADvalue);

ADvalue=ADC_P13()/9; //采样P1.1口模拟输入电压 9根据输入电压,芯片电压测试得出

dis_play2(ADvalue);

Delay_50ms(10);

///////////////高电平关提升链板输送带////////////

key_reset();

for(;kcounter<5;) //按键循环5次

{

if(!KEY_ADD) //按键高电平

{

Key_ValAdd(); //按键高电平 计数器加一状态标志加一

}

else if(~!KEY_ADD) //按键低电平

{

Key_Clear(); //按键计数器加一 状态标志归零

}

}

if(kstatus>=3) /*按键状态标志大于等于3为有效值*/

{

;

}

}

} //L510 CODE 2549

////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////

LCD12864 显示P10***V P11***V

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

void dis_play1(uint val) /*显示A函数*/

{

uint Data_a,Data_b,Data_c,Data_d;

Data_a=val/1000;

Data_b=(val-Data_a*1000)/100;

Data_c=(val-Data_a*1000-Data_b*100)/10;

Data_d=val-Data_a*1000-Data_b*100-Data_c*10;

write_com(0X80); /*地址*/

write_data(0X50); /*P*/

write_com(0X81); /*地址*/

write_data(0X31); /*1*/

write_com(0X82); /*地址*/

write_data(0X3A); /*1*/

write_com(0X83); /*地址*/

write_data(disdt[Data_b]); /*十位*/

write_com(0X84); /*地址*/

write_data(disdt[Data_c]); /*个位*/

write_com(0X85); /*地址*/

write_data(0X2E); /*.*/

write_com(0X86); /*地址*/

write_data(disdt[Data_d]); /*个位*/

write_com(0X87); /*地址*/

write_data(0X56); /*V*/

}

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

void dis_play2(uint val) /*显示A函数*/

{

uint Data_a,Data_b,Data_c,Data_d;

Data_a=val/1000;

Data_b=(val-Data_a*1000)/100;

Data_c=(val-Data_a*1000-Data_b*100)/10;

Data_d=val-Data_a*1000-Data_b*100-Data_c*10;

write_com(0X88); /*地址*/

write_data(0X53); /*S*/

write_com(0X89); /*地址*/

write_data(0X31); /*1*/

write_com(0X8A); /*地址*/

write_data(0X3A); /*1*/

write_com(0X8B); /*地址*/

write_data(disdt[Data_b]); /*十位*/

write_com(0X8C); /*地址*/

write_data(disdt[Data_c]); /*个位*/

write_com(0X8D); /*地址*/

write_data(0X2E); /*.*/

write_com(0X8E); /*地址*/

write_data(disdt[Data_d]); /*个位*/

write_com(0X8F); /*地址*/

write_data(0X56); /*V*/

}

相关推荐
恶魔泡泡糖1 小时前
51单片机-DS18B20温度传感器
单片机·嵌入式硬件·51单片机
隔壁大炮2 小时前
GPIO——4种输出模式
单片机·嵌入式硬件·铁头山羊
阿ฅ( ̳• ε • ̳)ฅ4 小时前
STM32串口打印printf没反应
stm32·单片机·嵌入式硬件
古译汉书4 小时前
串口模拟工具:com0com 介绍、下载、驱动感叹号解决
linux·运维·服务器·stm32·单片机·嵌入式硬件
沐欣工作室_lvyiyi5 小时前
基于单片机的数字调频式立体声收音机
stm32·单片机·嵌入式硬件·毕业设计·收音机·数字调频式
国科安芯6 小时前
中高轨激光通信卫星伺服控制器抗辐照电源模块设计
单片机·嵌入式硬件·架构
嵌入式×边缘AI:打怪升级日志7 小时前
上机实验指南:Bootloader 串口升级与启动验证
单片机·嵌入式硬件
古译汉书7 小时前
【IoT死磕系列】Day 1:IOT物联网各个协议的整体了解
stm32·单片机·嵌入式硬件·物联网·iot
国科安芯7 小时前
空间站机械臂中MCU与CANFD抗辐照芯片的集成研究
单片机·嵌入式硬件·fpga开发·架构·risc-v