📄 dd.c
字号:
#include<reg51.h>
//#include<intrinsics.h>
#define uint unsigned int
#define uchar unsigned char
/*#define s 8000000 //__delay_cycles(1*us)
#define ms 8000 //__delay_cycles(1*ms)
#define us 8 //__delay_cycles(1*us) */
/*12864 引脚定义-串行接口 */
/*#define CS=1 PORTC_Bit3=1 // asm("sbi 0x18,3") //CS设为高电平
#define CS=0 PORTC_Bit3=0 //asm("cbi 0x18,3") //CS设为低电平
#define SID=1 PORTC_Bit4=1 //asm("sbi 0x18,2") //SID设为高电平
#define SID=0 PORTC_Bit4=0 //asm("cbi 0x18,2") //SID设为低电平
#define SCLK=1 PORTC_Bit5=1 //asm("sbi 0x18,1") //SCLK设为高电平
#define SCLK=0 PORTC_Bit5=0 //asm("cbi 0x18,1") //SCLK设为低电平
/***********tlc5615*********************************/
/*#define DIN PORTD_Bit2
#define SCLK PORTD_Bit1
#define EN PORTD_Bit0 */
sbit CS=P3^0;//4
sbit SID=P3^1; //5
sbit SCLK=P3^3; //6管脚
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<121;y++);
}
//计算实际电压
/*
uint value=0, voltage=0; //电压单位为(mV)
uchar key_scan_biao_zhi=0, key=0;
uchar mo_shi_xian_shi=0,mode=0;
uint dac=102; */
/*---------------------12864开始-----------------------------------------------*/
/********************************************************************
函数作用:负责串行输出8个bit位
********************************************************************/
void Write_8bits(uint W_bits)
{
uint i,Temp_data;
for(i=0; i<8; i++)
{
Temp_data = W_bits;
Temp_data <<= i;
if((Temp_data&0x80)==0) //bit7 is zero
{
SID=0;
delay(1);
SCLK=1;
delay(1);
delay(1);
SCLK=0;
delay(1);
SID=0;
}
else //bit7 is one
{
SID=1;
delay(1);
SCLK=1;
delay(1);
delay(1);
SCLK=0;
delay(1);
SID=0;
}
}
}
/*******************************************************************
函数作用:写一个字节的数据到12864液晶,包括指令和数据
说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
(一般RW都设为0,即只向液晶写数据,不读数据)
RS="1",写入的是数据;RS=0,写入的是指令;
一般模式:RW=0,RS=1;写数据
RW="0",RS=0;写指令
********************************************************************/
void W_1byte(uchar RW, uchar RS, uchar W_data)
{
uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
if(RW == 0)
{
S_ID &=~ 0x04;
}
else //if(RW==1)
{
S_ID |= 0X04;
}
if(RS == 0)
{
S_ID &=~ 0x02;
}
else //if(RS==1)
{
S_ID |= 0X02;
}
H_data = W_data;
H_data &= 0xf0; //屏蔽低4位的数据
L_data = W_data; //xxxx0000格式
L_data &= 0x0f; //屏蔽高4位的数据
L_data <<= 4; //xxxx0000格式
CS=1;
Write_8bits(S_ID); //发送S_ID
Write_8bits(H_data); //发送H_data
Write_8bits(L_data); //发送L_data
SID=1;
CS=0;
}
/******************************************************************/
void LCD_Init(void)
{
uchar cmd;
cmd=0x30; //功能设置 8位数据,基本指令
W_1byte(0,0,cmd);
delay(2);
cmd=0x30; //功能设置 8位数据,基本指令
W_1byte(0,0,cmd);
delay(2);
cmd=0x0C; //显示状态 ON,游标OFF,反白OFF
W_1byte(0,0,cmd); //写指令
delay(2);
cmd=0x01; //清除显示
W_1byte(0,0,cmd); //写指令
delay(2);
/*cmd=0x02; //地址归位
W_1byte(0,0,cmd); //写指令
delay(2);
/*cmd=0x80; //设置DDRAM地址
W_1byte(0,0,cmd); //写指令
delay(2); //延时 */
}
/*----------------------------------12864结束--------------------------------------*/
/*void da5615(uint Data)
{
unsigned char i;
EN=1 ;
EN=0;
//SCLK=0 ;
for (i=0;i<12;i++)
{SCLK=0;
if(Data&0x8000)
DIN=1;
else
DIN=0;
Data<<=1;
delay(1);
SCLK=1;
}
EN=0;
EN=1;
} */
/*--------------------------------------键盘开始--------------------------------------*/
/*
//adc转换初始化
void adc_init(void)
{
ADCSRB |=0x00;//连续转换模式
ADMUX = 0x42; //参考电压为VACC ADC2通道输入 转换结果右对齐
ADCSRA |= 0xe6;// 启动ADC 先转化一次 64分频
}
void adc_calc(void)
{
value=ADCL; //首先读低位
value|=(uint)ADCH << 8; //然后读高位
voltage=(value*5.0/1024)*1000;
mynew3[0]= voltage/1000;
mynew3[1]=( voltage/100)%10;
mynew3[2]=( voltage/10)%10;
mynew3[3]= voltage%10;
}
void key_value(void)
{
key_scan_biao_zhi=1;
__delay_cycles(4*ms);
__delay_cycles(4*ms);
__delay_cycles(4*ms);
__delay_cycles(4*ms);
adc_calc();
if(voltage>950&&voltage<1150) { key=0x01;}//1
if(voltage>1150&&voltage<1350){ key=0x02;}//2
if(voltage>2350&&voltage<2550){ key=0x03;}//3
if(voltage>750&&voltage<950) { key=0x04;}//4
if(voltage>1350&&voltage<1550){ key=0x05;}//5
if(voltage>2200&&voltage<2350){ key=0x06;}//6
if(voltage>550&&voltage<750) { key=0x07;}//7
if(voltage>1550&&voltage<1680){ key=0x08;}//8
if(voltage>2050&&voltage<2200){ key=0x09;}//9
if(voltage>350&&voltage<550) { key=0x0a;}//0
if(voltage>1680&&voltage<1850){ key=0x0b;}//点
if(voltage>1850&&voltage<2050){ key=0x0c;}//确定
if(voltage>2550&&voltage<2750){ key=0x0d;}//存储
if(voltage>2750&&voltage<2950){ key=0x0e;}//读出
if(voltage>2950&&voltage<3120){ key=0x0f;}//-
if(voltage>3120&&voltage<3300){ key=0x010;}//+
}
void key_scan(void)
{
switch(key)
{ case 0x01: { dac += 5; dac<<=6; da5615(dac); dac >>=6; break; }
case 0x02: { dac -= 5; dac<<=6; da5615(dac); dac >>=6; break; }
case 0x03: { break; }
case 0x04: { break; }
case 0x05: { break; }
case 0x06: { break; }
case 0x07: { break; }
case 0x08: { break; }
case 0x09: { break; }
case 0x0a: { break; }
case 0x0b: { break; }
case 0x0c: { break; }
case 0x0d: { break; }
case 0x0e: { break; }
case 0x0f: { break; }
case 0x10: { break; }
}
key_scan_biao_zhi=0;
key=0;
}
void key_working(void)
{
adc_calc();
if(voltage<4500) key_value();
if(voltage>4500&&key_scan_biao_zhi==1) key_scan();
} */
/*----------------------------------键盘结素----------------------------------------*/
/*---------倒计时显示---------*/
/*------主函数---------*/
void main()
{
CS=0;
SCLK=0;
SID=0;
LCD_Init();
while(1){
W_1byte(0,0,0x80);
delay(5);
W_1byte(0,1,0x31);
delay(5);
// lcdmode0();
} }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -