久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1474|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

計(jì)算器+1602

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:222532 發(fā)表于 2017-7-28 16:14 | 只看該作者 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uchar  unsigned char  
#define uint  unsigned int
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^2;
sbit Busy = P0^7;
void delay(uint z)
{
   while(z--);
}
void BusyJiance(void)                 //忙檢測
{
  P0 = 0xFF;
  RS = 0;
  RW = 1;
  EN = 1;
  while(Busy);
  EN = 0;
}
void WriteLCD1602Command(uchar com)
{
            BusyJiance();
   
   P0 = com;
   RS = 0;
   RW = 0;
   EN = 1;
   delay(2);
   EN = 0;
}
void WriteLCD1602Dat(uchar dat)
{
      BusyJiance();
   P0 = dat;
   RS = 1;
   RW = 0;   
   EN = 1;
   delay(2);
   EN = 0;
}
void LCD1602_Init(void)
{
  WriteLCD1602Command(0x38);
  WriteLCD1602Command(0x0c);
  WriteLCD1602Command(0x06);
  WriteLCD1602Command(0x01);
  //WriteLCD1602Command(0x08);
}
/*******顯示單個(gè)字符函數(shù)***********/
void LCD_Write_Char(uchar x,uchar y,uchar a)
{   
   if (y == 0)
   {   
       WriteLCD1602Command(0x80 + x);   
   }   
   else
   {   
       WriteLCD1602Command(0xC0 + x);   
   }      
   WriteLCD1602Dat(a);
}
/*******顯示字符串函數(shù)************/
void DisplayLCD1602(uchar x, uchar y, uchar *p)
{
  if(x == 0)
  {
    WriteLCD1602Command(0x80 + y);
  }
  else
  {
    WriteLCD1602Command(0xc0 + y);
  }
  
  while(*p)
  {
    WriteLCD1602Dat(*p);
    p++;
  }
}
/*按鍵掃描函數(shù),返回掃描鍵值*/
uchar KeyScan()  //鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法
{
    uchar num1;
static uchar key_on =0;
P2=0x0f;
if(P2!=0x0f)
{
    if(key_on==0)
    {
       key_on=1;
    num1=P2;
    num1 |= 0xf0;
    P2=num1;
    num1=P2;
    return(num1);
        }
}
else
{
    key_on=0;
}
    return(0xff);
}
uchar KeyPro()
{
switch(KeyScan())
{
//    case 0x7e:return '+';break;//0 按下相應(yīng)的鍵顯示相對應(yīng)的碼值
//   case 0x7d:return '-';break;//1
//   case 0x7b:return '*';break;//2
//   case 0x77:return '/';break;//3
//   
//   case 0xbe:return '3';break;//4
//   case 0xbd:return '6';break;//5
//   case 0xbb:return '9';break;//6
//   case 0xb7:return '=';break;//7
//   
//   case 0xde:return '2';break;//8
//   case 0xdd:return '5';break;//9
//   case 0xdb:return '8';break;//a
//   case 0xd7:return '0';break;//b
//  
//   case 0xee:return '1';break;//c
//   case 0xed:return '4';break;//d
//   case 0xeb:return '7';break;//e
//   case 0xe7:return '.';break;//f
//   default:return 0xff;break;
//  
   case 0xe7:return '.';break;//0 按下相應(yīng)的鍵顯示相對應(yīng)的碼值
   case 0xeb:return '0';break;//1
   case 0xed:return '=';break;//2 .0=/
   case 0xee:return '/';break;//3
   
   case 0xd7:return '7';break;//4
   case 0xdb:return '8';break;//5 789*
   case 0xdd:return '9';break;//6
   case 0xde:return '*';break;//7
   
   case 0xb7:return '4';break;//8
   case 0xbb:return '5';break;//9 456-
   case 0xbd:return '6';break;//a
   case 0xbe:return '-';break;//b
  
   case 0x77:return '1';break;//c
   case 0x7b:return '2';break;//d 123+
   case 0x7d:return '3';break;//e
   case 0x7e:return '+';break;//f
   default:return 0xff;break;

}
}
void main()
{
  unsigned char num,i,sign;                 
  unsigned char temp[16];   //最大輸入16個(gè) -
  bit firstflag;       //標(biāo)志位
  float a=0,b=0;
  unsigned char s;
  LCD1602_Init();    //初始化液晶屏
  WriteLCD1602Command(0x01); //清屏
  while (1)            //主循環(huán)
  {
   num=KeyPro();    //掃描鍵盤
   if(num != 0xff)    //如果掃描是按鍵有效值則進(jìn)行處理
   {
      if(i==0)      //輸入是第一個(gè)字符的時(shí)候需要清空,方便觀看
      {
         WriteLCD1602Command(0x01);
      }
      if((num=='+')||(num=='-') || (num=='*')|| (num=='/') || (num=='='))//輸入符號表示輸入結(jié)束
         {
            i=0;    //計(jì)數(shù)器復(fù)位
            if(firstflag==0)  //如果是輸入的第一個(gè)數(shù)據(jù),賦值給a,并把標(biāo)志位 置1,到下一個(gè)數(shù)據(jù)輸入時(shí)可以跳轉(zhuǎn)賦值給b
            {
                sscanf(temp,"%f",&a);
                firstflag=1;
               }
               else     //把第二個(gè)數(shù)據(jù)賦給 b
      {
                   sscanf(temp,"%f",&b);
      }
               for(s=0;s<16;s++) //賦值完成后把緩沖區(qū)清零,防止下次輸入影響結(jié)果
               temp[s]=0;
               LCD_Write_Char(0,1,num);
               if(num != '=')      //判斷當(dāng)前符號位并做相應(yīng)處理
               sign=num;         //如果不是等號記下標(biāo)志位
               else
               {
                   firstflag=0;   //檢測到輸入=號,判斷上次讀入的符合
                   switch(sign)
                   {
         case '+':a=a+b;break;
         case '-':a=a-b;break;
         case '*':a=a*b;break;
         case '/':a=a/b;break;
         default:break;
                   }
                   sprintf(temp,"%g",a);    //輸出浮點(diǎn)型,無用的0不輸出
                   DisplayLCD1602(1,1,temp);//顯示到液晶屏
                   sign=0;a=b=0;            //用完后所有數(shù)據(jù)清零
                   for(s=0;s<16;s++)     //賦值完成后把緩沖區(qū)清零,防止下次輸入影響結(jié)果
                   temp[s]=0;
               }
            }
       else    //輸入的是數(shù)字并處理
       {
        if(i<=16)
     {
        if( (1==i) && (temp[0]=='0') )//如果第一個(gè)字符是0,判讀第二個(gè)字符(i不自加一)
        {
            if(num=='.')  //如果是小數(shù)點(diǎn)則正常輸入,光標(biāo)位置加1
            {
                temp[1]='.';
                LCD_Write_Char(1,0,num);//輸出數(shù)據(jù)
                i++;
            } //這里沒有判斷連續(xù)按小數(shù)點(diǎn),如0.0.0
                     else
                     {
             temp[0]=num;     //如果是1-9數(shù)字,說明0沒有用,則直接替換第一位0
             LCD_Write_Char(0,0,num);//輸出
                     }
                 }
           else
      {
             temp[i]=num;
             LCD_Write_Char(i,0,num);//輸出數(shù)據(jù)(顯示)
             i++;        //光標(biāo)位置加1
       if(i==16)
       {
          i=0;   //防止當(dāng)按下17下的時(shí)候等待
       }
        }
    }
    }
    }
  }
  
   
  
   
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品视频在线观看视频 | 丝袜 亚洲 欧美 日韩 综合 | 国产剧情一区 | 午夜久久久 | 欧洲成人午夜免费大片 | 一级毛片免费看 | 亚洲性人人天天夜夜摸 | 91精品国产91久久久久久吃药 | 性一交一乱一伦视频免费观看 | 久久男人天堂 | 亚洲一区二区三区免费在线观看 | 久久久高清 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 天天操天天怕 | 欧美精品一区在线发布 | 欧美一区免费 | 一区二区三区四区在线免费观看 | 欧美日韩国产精品一区 | 中文字幕av亚洲精品一部二部 | 成人在线免费网站 | jav成人av免费播放 | 国产午夜久久久 | 99爱在线免费观看 | 国产福利在线播放麻豆 | 99re热这里只有精品视频 | 在线免费观看黄a | 国产高清免费视频 | 欧美国产视频一区二区 | 国产一级片 | 大象视频一区二区 | 国产视频第一页 | 久久久99精品免费观看 | 成人在线视频观看 | www.久久| 97国产精品视频 | 亚洲黄色网址视频 | 欧美一区二区三区在线看 | 久久久久无码国产精品一区 | 91成人免费看片 | 91观看| 日韩午夜激情 |