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

📄 dd.c

📁 3线控制12864液晶的源程序代码
💻 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 + -