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

📄 wode.c

📁 51单片机各常用子模块的C程序
💻 C
字号:
#include <math.h>
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
#define a_8255 XBYTE[0x2ffc]
#define b_8255 XBYTE[0x2ffd]
#define c_8255 XBYTE[0x2ffe]
#define k_8255 XBYTE[0x2fff]
#define da_a XBYTE[0x5000]
#define unchar unsigned char
#define unint  unsigned int
void lcd_write_dat(unchar dat);
void lcd_init();
void lcd_write_command(unchar command);
void delay(int ms);
unint jp();
void get(unchar t);
int log2(unchar t);
void int_intr();



 long midlle,second;
long sp,sp1; 

unchar key_wr[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
unchar key,keyk,key1,key2,k;


void main()
{
   unchar a=0,b=0;
   unint y,z=0;
   k_8255=0x82;   //。。。。。。初始化8255
   lcd_init();
  int_intr();
while(1)
{

 
 /* c_8255=0x00;
     while(~b_8255!=0)//如果有按键关中断
	   {
   
        EA=0;
		ET0=0;
		second=0;
		midlle=0;
		k=0;
      
       if(z==3) {z=0;EA=1;ET0=1; }//显示三个键植后开中断   
     y=jp();
    z+=y; //记录按键次数
  while(b_8255!=0xff)//。。。。。等待放键
  key=key_wr[keyk]; 
  lcd_write_command(0x80+z);
  lcd_write_dat(key);//。。。。。。显示键zi 
  
 
  }*/
 }

}

//。。。。。。液晶。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
void lcd_init()         //初始化液晶
 {
  lcd_write_command(0x38);
  delay(10); 
  lcd_write_command(0x38);
  lcd_write_command(0x38);
  lcd_write_command(0x0c);
  lcd_write_command(0x06);
  lcd_write_command(0x01); 
}
void lcd_write_command(unchar command)  //给液晶写控制指令
{ 
  c_8255=0x00;    //RS=0,RW=0,E=0
  delay(5);
  a_8255=command;
  delay(5);
  c_8255=0x04;    //RS=0,RW=0,E=1
  delay(5);
  c_8255=0x00;   //RS=0,RW=0,E=0
  delay(5);
}
void lcd_write_dat(unchar dat) //给液晶写显示数据
{
  c_8255=0x01;
  delay(5);
  a_8255=dat;
  delay(5);
  c_8255=0x05;
  delay(5);
  c_8255=0x01;
}
void delay(int ms)  //。。。。。。。延时ms毫秒
{ int i;
  for(;ms!=0;ms--) 
  for(i=1110;i!=0;i--);
 }

 //   。。。。。。。键盘。。。。。。。。。。。。。。。。。。。。。。。。。。。
unint jp()    //判断有无按键,及读键值。放到全局变量key中
  {
	 get(0xe0);
     key1=keyk;
     delay(1);
      get(0xe0);
      key2=keyk;
	if(key1==key2)
	
	 key=key2; 
        

   // else 
	 
	   //lcd_write_command(0x10) ;//如果两次判键不一样key还保持前一次的值光标向左移一位
	 
	return(1) ;
	}
int log2(unchar t)     //log以2为底的对数函数
     {
	   int i;
	   for(i=0;t!=0;i++)
	   t=t/2;
	   return(i-1);
	 }
void get( unchar t)     //取键值函数
     {
	 int i;
     unchar z;
	 c_8255=t;
	 for(i=0;~b_8255==0;i++)//。。。。。for语句得到列值i
	    {        
        t=t<<1;
        c_8255=t;
        }
       	 z=~b_8255;
         keyk=log2(z)*4+i;//。。。。。得到键值
         delay(1);
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void int_intr()
  {
   TMOD=0x26;//t1定时。t0计数
   TL0=0xff;
   TH0=TL0;
   TL1=6;
   TH1=TL1;
   EA=1;
    ET0=1;
    ET1=1;
    TR0=1;

  }

  void  jishu() interrupt 1 //t0外部计数
  {
   
   k++;

// TL0=0xff;
 //  TH0=TL0;

  if(k==1) TR1=1;//开定时中断

  if(k==7) 
    {
	EA=0;
      TR1=0;ET1=0;
      TR0=0;ET0=0;
      k=0;
  sp1=sp;
  sp=360000/(second*1000+midlle*1000/3686);
	lcd_write_command(0x85);//在液晶屏第一行显示速度
	    lcd_write_dat(sp/100+0x30);
        lcd_write_dat(sp%100/10+0x30);
        lcd_write_dat(sp%100%10+0x30);

  second=0;
  midlle=0;

 //TL0=0xf;
   //TH0=TL0;
     TR0=1;
     ET1=1;
	 ET0=1;
	 EA=1;

     delay(8);
     }
  }

void time() interrupt 3
   {
    
     midlle++;
     if(midlle==3686)
       {
        second++;
        midlle=0;
       }

   }
		 

⌨️ 快捷键说明

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