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

📄 sh.c

📁 一个在KEIL环境下的单片机程序,显示屏为LCD128x64.
💻 C
字号:
#include <AT89X52.H>
#include <intrins.h>
sbit RS = P3^5;
sbit RW = P3^7;
sbit E  = P3^6;
#define Lcd_Bus P2
unsigned char t_change=0;             
unsigned char set_time[10][2],g_i,g_j;
unsigned char  str4[4]="123",str3[3]="12"; 
unsigned char disp_buf[8],buf[8],show_i,tbuf1,tbuf2,tbuf3;
unsigned char keybyte,Ckey,Pkey,g_order,i_i,i_j;
unsigned int counter,Pkeytime;
bit show_time,run_time,Key_ok,Presskey_long,Pkey_long;
sbit T_CLK = P1^1; /*实时时钟时钟线引脚 */
sbit T_IO = P1^2; /*实时时钟数据线引脚 */
sbit T_RST = P1^3;
sbit  ACC0 = ACC^0;
sbit  ACC7 = ACC^7;

void int1(void) interrupt 0
{}
void int2(void) interrupt 2
{}
void int3(void) interrupt 3
{}
void int4(void) interrupt 4
{}

void v_RTInputByte(unsigned char ucDa)   /* 发命令,数据  */
{ 
unsigned char i;
ACC = ucDa;
for(i=8; i>0; i--)
{
T_IO = ACC0;
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1; 
} 
}
unsigned char uc_RTOutputByte(void) /* 收数据 */
{ 
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
} 
return(ACC); 
}
void v_W1302(unsigned char ucAddr,unsigned char ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(ucAddr); /* 地址,命令 */
v_RTInputByte(ucDa); /* 写1Byte数据*/
T_CLK = 1;
T_RST =0;
} 
unsigned char uc_R1302(unsigned char ucAddr)
{
unsigned char ucDa;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(ucAddr); /* 地址,命令 */
ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST =0;
return(ucDa);
}

void scan_disp_int(void) interrupt 1 using 0
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
/*===========键盘处理==============*/
P1=0xf0;
keybyte=P1;
keybyte=~keybyte;
keybyte=keybyte&0xf0; 
if(keybyte){Pkeytime++;
            Ckey=keybyte;
            if(Pkeytime>10)  { Key_ok=1; }           
		   }
/*============计时处理=============
if(run_time)
{
tbuf3=uc_R1302(0x81);
tbuf2=uc_R1302(0x83);
tbuf1=uc_R1302(0x85);  
}                       */
}

void delay(unsigned int t)
{  unsigned int i,j;
   for (i=0;i<t;i++)
     for(j=0;j<10;j++);
} 

void write_data(unsigned char dispdata)
{  RS=1;
   RW=0;
   E=1;
   Lcd_Bus=dispdata;
   E=0;
   delay(5);
}

void write_cmd(unsigned char cmdcode)
{   RS=0;
    RW=0;
    E =1;
    Lcd_Bus=cmdcode;
    E=0;
    delay(5);
}

void lcdinit()
{   delay(2000);
    write_cmd(0x30);
    delay(10);
    write_cmd(0x30);
    delay(5);
    write_cmd(0x0c);
    delay(10);
    write_cmd(0x01);
    delay(500);
    write_cmd(0x06);
    delay(0);
}

void dispHZ(unsigned char  * s)
{  while(*s>0)
      { write_data(*s);
        s++;
        delay(50);
      }
}

unsigned char bit4_hex(unsigned bit4)
{
switch (bit4)
 { case 0:  return(0x30);
   case 1:  return(0x31);
   case 2:  return(0x32);
   case 3:  return(0x33);
   case 4:  return(0x34);
   case 5:  return(0x35);
   case 6:  return(0x36);
   case 7:  return(0x37);
   case 8:  return(0x38);
   case 9:  return(0x39);
   case 10: return(0x41);
   case 11: return(0x42);
   case 12: return(0x43);
   case 13: return(0x44);
   case 14: return(0x45);
   case 15: return(0x46);
 default  : return(0x1);  
 }
}


void byte_hex2(unsigned char aa)
{
 str3[0]=bit4_hex((aa>>4)&0x0F);
 str3[1]=bit4_hex(aa&0x0F);
 str3[2]=0;
 
} 

void byte_bcd3(unsigned char bb)
{
 str4[0]=bit4_hex(bb/100);
 str4[1]=bit4_hex(((bb%100)/10));
 str4[2]=bit4_hex(((bb%100)%10));
 str4[3]=0;
 
} 



void dispTest()
{   write_cmd(0x01);
    delay(5);
    write_cmd(0x81);
    dispHZ("FXB co.,LTD.");
    write_cmd(0x92);
    dispHZ("风向标>>");
    write_cmd(0x88);
    dispHZ("科技有限公司研制");
    write_cmd(0x98);
    dispHZ("---- 2006.12.25");
    Pkey=0;
    while(Pkey==0){} Pkey=0;
    // delay(30000);

	// ==============================

    write_cmd(0x01);
    delay(5);
    write_cmd(0x81);
    dispHZ("大众安全气囊");
    write_cmd(0x92);
    dispHZ("复位仪");
    write_cmd(0x89);
    dispHZ("VW SRS TOOL");
    write_cmd(0x98);
    dispHZ("================");
    Pkey=0;
    while(Pkey==0){} Pkey=0;
	//===============================
    // delay(30000);
    write_cmd(0x01);
    delay(5);
    write_cmd(0x81);
    dispHZ("请选择功能:");
    write_cmd(0x90);
    dispHZ("1- 碰撞电脑复位");
    write_cmd(0x88);
    dispHZ("2- 清除故障代码");
    write_cmd(0x98);
    dispHZ("3- 扩展功能");
}

main()
{ 
  
  show_i=1;
  counter=0;
  Pkey_long=0;
  Pkey=0;
  Key_ok=0;
  show_time=1;
  run_time=1;
  TH0=(65536-1000)/256;
  TL0=(65536-1000)%256;
  TMOD=1;
  TR0=1;
  ET0=1;
  EA=1;

/*=====DS1302初始化=====2005-05-10==*/
tbuf1=uc_R1302(0x81);
tbuf1=tbuf1&0x7f;
v_W1302(0x8e,0);
v_W1302(0x80,tbuf1);
v_W1302(0x8e,0x80);


   lcdinit();
   delay(10);
   if (Pkey!=0){  Pkey=0;
                  write_cmd(0x01);
                  delay(5);
                  write_cmd(0x80);
                  dispHZ("  SRS  复位仪 ");
                  write_cmd(0x90);
                  dispHZ("软件版本 Ver0.8 ");
                  write_cmd(0x88);
                  dispHZ("软件编写: 许曦 ");
                  write_cmd(0x98);
                  dispHZ("2006年12月风向标");
                  delay(60000);
				}
   //write_cmd(0x30);
   dispTest();
  /*  while(Pkey==0) 
             {  
               P0_6=0;
               delay(1000);
			   P0_6=1;
            delay(1000);
             }
	Pkey=0; */
  //write_cmd(0x34);
  i_i=0;
  i_j=0;
  P1_0=1;
  while(1)
   { if(Pkey!=0){ Pkey=0;
                  //write_cmd(0x04);
				  ACC=(i_j<<6)+(i_i);
				  P0=ACC;
				  t_change=ACC;
				  //P0=0x85;
				  byte_hex2(t_change);
                  write_cmd(0x90);
                  dispHZ(str3);


				  byte_bcd3(i_i);
                  write_cmd(0x88);
                  dispHZ(str4);

                  byte_bcd3(i_j);
                  write_cmd(0x98);
                  dispHZ(str4);
                  P1_0=0;

                  i_j++;
     			  if(i_j>3)i_j=0;
                  if (i_i>21){i_i=0; P1_0=0;}
				  if (i_j==0)i_i++;                 
				  
				  
				  }
   /* if(Pkey==2){  Pkey=0;
	               P0_6=0;
                   delay(1000);
			       P0_6=1;
	              write_cmd(0x05);
				}
     if(Pkey==3){ Pkey=0;
	              P0_6=0;
                  delay(1000);
			      P0_6=1;
	              write_cmd(0x06);
				}
     if(Pkey==4){ Pkey=0; 
	              P0_6=0;
                  delay(1000);
			      P0_6=1;
	              write_cmd(0x07);
				}  */
   }
}
                      

⌨️ 快捷键说明

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