• 大小: 70KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: 其他
  • 标签: 单片机  

资源简介

89C51单片机程序例 用拨码盘输入数据,控制电机转动,用LCD显示计数。

资源截图

代码片段和文件信息

	
    #include“lcd1602.h“

#define uchar unsigned char
#define uint unsigned int
    uchar out[6];

sbit STAR_KEY =P3^2;//定义键与单片机的连接引脚

sbit L0=P1^0;  //定义SFR中引脚的位
sbit L1=P1^1;
sbit L2=P1^2;
sbit L3=P1^3;
sbit L4=P1^4;
sbit L5=P1^5;
sbit L6=P1^6;
sbit L7=P1^7;


sbit MOTOR=P3^0;
uchar n[2]={10};
void delayms(uint x)   //延时子程序
{
  uchar y;
  while(x--)
  {
    for(y=0;y<123;y++){;}
  }
}

uchar Keynum()  //按键子程序1
{
   uchar key=0;
   STAR_KEY=1; //置初值
   if(STAR_KEY==0){delayms(10);if(STAR_KEY==0)n[0]=0;n[1]=1;}  //按下STAR键则n[0]=0;n[1]=1
   return n[1];  //返回n值
}
void xianshi(uint dispbuf)   //显示子程序

out[0]=dispbuf/10000+0x30;
out[1]=((dispbuf%10000)/1000)+0x30;
out[2]=((dispbuf%1000)/100)+0x30;
out[3]=((dispbuf%100)/10)+0x30;
out[4]=dispbuf%10+0x30;
out[5]=‘\0‘; 
LCD_Initial();          //LCD初始化
LCD_Prints(1 0“The Speed Is“);   //LCD输出
LCD_Prints(10 1“n/min“);
LCD_Prints(4 1out);      
}
uint qiuzhi() //求用拨码盘所置数的值的子程序
{
   uchar a;
   uchar b;
   uchar c;
   uchar d;
   uchar e;
   uchar f;
   uchar g;
   uchar h;
 
   uint p=0;
   if (L0==1) {a=1;} else {a=0;} //将电平信号变为数字的值
   if (L1==1) {b=1;} else {b=0;}
   if (L2==1) {c=1;} else {c=0;}
   if (L3==1) {d=1;} else {d=0;}
   if (L4==1) {e=1;} else {e=0;}
   if (L5==1) {f=1;} else {f=0;}
   if (L6==1) {g=1;} else {g=0;}
   if (L7==1) {h=1;} else {h=0;}

   p=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2+g*2*2*2*2*2*2+h*2*2*2*2*2*2*2;
   return p;   // 返回所求的P值
}
void main(void)   //主程序
{
   uint q;
   IT0=1;     //负跳变触发
   EA=1;     //开总允许中断
   EX0=1;     //开INTO中断
       
   TMOD=0X05;  //置T0为计数器    方式1
   TL0=0; //置计数器初值
   TH0=0;
   while(1) //无限循环
   { 
      q=qiuzhi();    //调用求值子程序求出所置的数
      if (MOTOR==1) {xianshi(q);} else {xianshi(TL0);Keynum();TR0=n[1];} //当电动机关闭时显示用薄码盘所置的数并停止计数,电机启动时则开始计数,并显示计数值
      if (TL0==q) {TR0=0;MOTOR=1;} else {Keynum();MOTOR=n[0];} //当计数值与所置数相同时关闭电机,停止计数,当计数值不等时则将电机启动与关闭交由按键控制,所以不存在计数值超过置数值的情况
   }
}
void Int0(void) interrupt 0  //中断服务程序,工作寄存器用0组
{
   TL0=0;TR0=1;    //重置计数值,重新开始计数
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      12268  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\gyreyre

     文件       2474  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\gyreyre.c

     文件     137174  2011-10-30 00:03  传送带产品计数器的设计(LCD显示)\gyreyre.DSN

     文件       2695  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\gyreyre.hex

     文件         47  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\gyreyre.lnp

     文件       5569  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\gyreyre.LST

     文件      13623  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\gyreyre.M51

     文件       7406  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\gyreyre.OBJ

     文件       1357  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\gyreyre.Opt

     文件        621  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\gyreyre.plg

     文件        768  2011-11-02 13:21  传送带产品计数器的设计(LCD显示)\gyreyre.PWI

     文件       2024  2011-10-29 23:59  传送带产品计数器的设计(LCD显示)\gyreyre.Uv2

     文件       1348  2011-10-29 23:59  传送带产品计数器的设计(LCD显示)\gyreyre_Opt.Bak

     文件       2024  2011-10-29 23:56  传送带产品计数器的设计(LCD显示)\gyreyre_Uv2.Bak

     文件     137174  2011-10-29 23:31  传送带产品计数器的设计(LCD显示)\Last Loaded gyreyre.DBK

     文件       3194  2011-09-16 22:22  传送带产品计数器的设计(LCD显示)\LCD1602.c

     文件        857  2011-03-30 18:31  传送带产品计数器的设计(LCD显示)\LCD1602.h

     文件       6313  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\LCD1602.LST

     文件       6514  2011-10-30 00:02  传送带产品计数器的设计(LCD显示)\LCD1602.OBJ

     目录          0  2011-11-04 22:57  传送带产品计数器的设计(LCD显示)

----------- ---------  ---------- -----  ----

               343450                    20


评论

共有 条评论