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

📄 d.c

📁 一个简单的C语言
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
/***************** LCD address*********/
#define w_c_add XBYTE[0x2070]    /*写命令字地址*/
#define w_d_add XBYTE[0x2071]    /*写数据地址*/
#define r_s_add XBYTE[0x2072]   /*读状态字地址*/
#define r_d_add XBYTE[0x2073]    /*读数据地址*/
/**************keybord  address*************/
#define COM XBYTE[0x2021]
#define DAT XBYTE[0x2020]
/******************步进电机******************/
unsigned char code num[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar idata zheng[10]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09,0x00};
uchar idata fan[10]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x00};
/**************变量声明******************/
static uchar idata ad[8];     /*定义数据存储区      */
uchar bdata status;
sbit busy=status^7;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p14=P1^4;
sbit p33=P3^3;
sbit p34=P3^4;
sbit p35=P3^5;
sbit p30=P3^0;
sbit p31=P3^1;
uint bj;       /*电机延时时间*/
uchar key=0;
uchar last_key=0;
char error;
uchar error1;
uchar coutlc; 
/****************显示 *******************/
uchar code welcom0[]="  智能电梯终端  ";
uchar code welcom1[]="      ";
uchar code welcom2[]="       ";
uchar code welcom3[]="    ";
uchar code reach[]="~  ~  ~  ~    ";
uchar code reach0[]="      楼已到    ";
uchar code reach1[]="  欢迎下次乘坐  ";
uchar code reach2[]="            ^_^  ";
uchar code space[]="                   ";
uchar code ask0[]="^_^          "; 
uchar code ask1[]="  欢迎乘坐电梯  ";
uchar code ask2[]="  你想去几楼    ";
uchar code ask3[]="  ~  ~  ~  ~";
uchar code change0[]="  *  *  *  *    ";
uchar code change1[]="§        楼  §";
uchar code change2[]="  *  *  *  *    ";
/***************函数声明*******************/
void chushi();
void start();
void show();
void show1();
void show2();
void show3();
void delay(uint n);
void lcd_busy(void);
void clear();
void display(uint m,uchar *p);
void display1(uint o);
void display2(uint p);
void dlms(uint n);
void ctrl(bit cf,uint n);
uint getkey();                  /*键盘函数*/
uint ifkey(void); 
/***************main函数*****************/
void main()
{   
	chushi();         /*初始化*/
	start();               
}
/*****************初始化***************/
void chushi()        
{   
	EA=1;
	IT0=1; 
	EX0=1;
	p33=1;
	p34=1;
        p35=1;
	show();	                       /*欢迎界面显示*/
	delay(2);
	show2();
	
}
/****************运行******************/
void start()
{
while(1)
{   
	key=getkey();                 /*输入键值*/
	error=key-last_key;           /*实际键值*/
	bj=50; 
	if(error<0)                   /*键值为负,下楼倒转*/
	{   clear();
		error1=0-error;
		ctrl(1,error1*10);
		p34=0;
		p35=0;
		show1();
		display1(key);
	}
	else 
	{   clear();                 /*键值为正,上楼正转*/
		ctrl(0,error*10);
		p34=0;
		p35=0;
		show1();
		display1(key);
	}
	delay(2);
	p33=0;
	delay(1);
	p33=1;
	delay(1);
	p33=0;
	delay(1);
	p33=1;
	delay(2);
	last_key=key;
}  
}
/******************显示******************/
void show()                            /*欢迎显示*/
{
	clear();
    display(0x80,welcom0);   
    display(0x90,welcom1);   
    display(0x88,welcom2);
    display(0x98,welcom3); 
}
void show1()                          /*到达显示*/
{   	
	clear();
	display(0x80,reach);   
    display(0x90,reach0);  
    display(0x88,reach1);
    display(0x98,reach2);
} 
void show2()                         /*询问要到几楼*/
{
	clear();
	display(0x80,ask0);   
    display(0x90,ask1);  
    display(0x88,ask2);
    display(0x98,ask3);
}  
void show3()                        /*楼层实时变化*/
{
	clear();
	display(0x80,change0);   
    display(0x90,change1);  
    display(0x88,space);
    display(0x98,change2);
}  
void lcd_busy(void)   /*LCD忙状态检测函数 */
{
	do 
	{
  	  status=r_s_add;  /* 读状态字地址的第7位 */
	}	
	while(busy);
}

void display(uint m,uchar *p)
{   uint n;
	uint add;	
	add=m;    /* 设置显示坐标,80H对应字符的第一行第一列 */  
	lcd_busy();
	w_c_add=add; /* 写数据 */
	for(n=0;n<8;n++)
	{
	    lcd_busy();
	    w_d_add=p[2*n];
		lcd_busy();       /* 写数据 ,上半字节*/
		w_d_add=p[2*n+1]; /* 写数据 ,下半字节*/
	}
	}
void display1(uint o)
{
	lcd_busy();
    w_c_add=0x91;	
    lcd_busy();	
    w_d_add=num[o/10];
    lcd_busy();	
	w_d_add=num[o%10];
	lcd_busy();	
}
void display2(uint p)
{
	lcd_busy();
    w_c_add=0x92;	
    lcd_busy();	
    w_d_add=num[p/10];
    lcd_busy();	
	w_d_add=num[p%10];
	lcd_busy();	
}
/********************重置****************/
void clear()
{
        lcd_busy();
	w_c_add=0x30;   /* 功能设置:8位数据 */
	lcd_busy();     
	w_c_add=0x0C;   /* 显示状态:整体显示,游标位置无效*/
	lcd_busy();
	w_c_add=0x01;/* 清除显示:将DDRAM填满“20H”,并且设定DDRAM的地址计数器到“00”*/
	lcd_busy();
	w_c_add=0x02;/* 地址归位:设定DDRAM的地址计数器到“00”,将游标移到开头原点位置 */
	display(0x80,space);  
	display(0x90,space);
	display(0x88,space);
	display(0x98,space);
}
/****************延时程序**********/
void delay1()                 
{   int x=100000;
    while(x--);
}
void delay(uint n)
{   uint i;
    for(i=0;i<n;i++)
	{
       delay1();
     }
}
/**************步进电机************/
void  ctrl(bit cf,uint n)
{   
	unsigned char jac=0;
    uint  i;
   	uchar  j=0;
	uint  k;
    if(cf==0)      /*正转标志*/
    {
    p34=0;
    p35=1;
    for(k=0;k<n;k++)
    {
     for(i=0;i<10;i++)
     {
      P1=zheng[j];
  	  dlms(bj);
      j+=1;
      if(zheng[j]==0) 
       j=0;
     }
     jac=(jac+1)%10;
     if(jac==9)
     coutlc++;
     show3();
     display2(coutlc);
   }
     
  }
      else     /*反转标志*/
       {
       	unsigned char jac1=0;
        p35=0;
       	p34=1;
       for(k=0;k<n;k++)
      {
      	for(i=0;i<10;i++)
          {
           P1=fan[j];
  	       dlms(bj);
           j+=1;
           if(fan[j]==0) 
           j=0;
           }
            jac=(jac+1)%10;
           if(jac==9)
           coutlc--;
          show3();
          display2(coutlc);
       }
   }
}
void dlms(uint speed)   /*步进电机节拍控制*/
{   
	 uint i;
	 uint j;
	for(i=0;i<speed;i++)
	{
		for(j=0;j<10;j++);
	}
}
/***************键盘函数****************/
uint  getkey()/*取键值函数*/
{ uchar i;
  while(ifkey()==0);/*无键按下等待*/
  COM=0x40;/*读fifo ram命令*/
  i=DAT;
  i=i&0x3f;/*取键值低6位*/
  return(i);/*返回键值*/
}
uint ifkey(void)/*判断fifo有键按下函数*/
{ uint k;
  k=COM;
  return(k&0x0f);/*有键按下*/
}

⌨️ 快捷键说明

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