欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于51單片機計算器源程序 可發送給上位機 可紅外
[打印本頁]
作者:
blai
時間:
2020-9-19 16:25
標題:
基于51單片機計算器源程序 可發送給上位機 可紅外
基于51計算器可發送給上位機可紅外
單片機源程序如下:
#include"lcd12864.h"
#include"reg52.h"
#include"i2c.h"
#include"math.h"
sbit IRIN=P3^2;
int app=0;
unsigned char IrValue[6];
unsigned char Time;
unsigned char code smgduan[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76};
void chuan()
{
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
REN=1;
SM0=1;
SM1=1;
}
void delay(unsigned int i)
{
while(i--);
}
void IrInit()
{
IT0=1;//下降沿觸發
EX0=1;//打開中斷0允許
EA=1; //打開總中斷
IRIN=1;//初始化端口
}
char hongwai()
{
if((smgduan[IrValue[2]/16]==0x06)&&(smgduan[IrValue[2]%16]==0x7d))
return '0';
if((smgduan[IrValue[2]/16]==0x3f)&&(smgduan[IrValue[2]%16]==0x39))
return '1';
if((smgduan[IrValue[2]/16]==0x06)&&(smgduan[IrValue[2]%16]==0x7f))
return '2';
if((smgduan[IrValue[2]/16]==0x6d)&&(smgduan[IrValue[2]%16]==0x79))
return '3';
if((smgduan[IrValue[2]/16]==0x3f)&&(smgduan[IrValue[2]%16]==0x7f))
return '4';
if((smgduan[IrValue[2]/16]==0x06)&&(smgduan[IrValue[2]%16]==0x39))
return '5';
if((smgduan[IrValue[2]/16]==0x6d)&&(smgduan[IrValue[2]%16]==0x77))
return '6';
if((smgduan[IrValue[2]/16]==0x66)&&(smgduan[IrValue[2]%16]==0x5b))
return '7';
if((smgduan[IrValue[2]/16]==0x6d)&&(smgduan[IrValue[2]%16]==0x5b))
return '8';
if((smgduan[IrValue[2]/16]==0x66)&&(smgduan[IrValue[2]%16]==0x77))
return '9';
if((smgduan[IrValue[2]/16]==0x3f)&&(smgduan[IrValue[2]%16]==0x6f))
return '+';
if((smgduan[IrValue[2]/16]==0x06)&&(smgduan[IrValue[2]%16]==0x6d))
return '-';
if((smgduan[IrValue[2]/16]==0x66)&&(smgduan[IrValue[2]%16]==0x4f))
return '/';
if((smgduan[IrValue[2]/16]==0x66)&&(smgduan[IrValue[2]%16]==0x3f))
return 'x';
if((smgduan[IrValue[2]/16]==0x3f)&&(smgduan[IrValue[2]%16]==0x07))
return '=';
if((smgduan[IrValue[2]/16]==0x66)&&(smgduan[IrValue[2]%16]==0x07))
return '.';
if((smgduan[IrValue[2]/16]==0x66)&&(smgduan[IrValue[2]%16]==0x7d))
return 'p';
if((smgduan[IrValue[2]/16]==0x66)&&(smgduan[IrValue[2]%16]==0x6d))
return '|';
else return 0xff;
}
main()
{
char i,sign,s,j,k,h=0;
unsigned char num;
char temp[16]; //最大輸入16個
bit firstflag;
double a=0,b=0;
chuan();
IrInit();
LCD_Init();
// LCD_Write_com(0x01); //清屏
while(1)
{ if(app==1)
{num=hongwai();
app=0;
}
else
num = KeyPro();
if(num!=0xff)
{
if(j == 0)
LCD_Write_com(0x01);
j=1;
if(num=='|')
{
a=At24c02Read(1);
firstflag = 1;
}
if(('+' == num) || ('-' == num) || ('x' == num) || ('/' == num) || ('=' == num)|| ('p' == num))
{
if(num=='p')
{
LCD_Write_Char(i,0,num);
i++;
h=1;
}
else
{k=0;
if(firstflag==0) //flag=1為第一個數,0為第二個數
{
sscanf(temp,"%f " ,&a);
firstflag = 1;
if(h==1)
a=a*a;
}
else
{sscanf(temp," %f " ,&b);
if(h==1)
b=b*b;}
for(s = 0;s<16;s++)
temp[s] = 0;
LCD_Write_Char(i,0,num);
i++ ;
//////////////////
if(num != '=')
sign = num;
else
{ j=0;
i=0;
firstflag = 0;
switch(sign)
{
case '+' :a = a+b;break;
case '-' :a = a-b;break;
case 'x' :a = a*b;break;
case '/' :a = a/b;break;
default:break;
}
//LCD_Write_Char(1,1,answer);
At24c02Write(1,a); //在地址1內寫入數據num
sprintf(temp,"%.2f",a); //輸出浮點型,無用的0不輸出
Write_String(0,3,temp);//顯示到液晶屏
for(s=0;temp[s]!='\0';s++)
{SBUF=temp[s];
while(!TI);
TI=0;
}
SBUF=' ';
while(!TI);
TI=0;
sign = 0;
a = 0;
b = 0;
for(s=0;s<16;s++)
temp[s]=0;
}
}
}
else if((i<24)&&(num!='s')&&(num!='p')&&(num!='k'))
{
if((1==i)&&(temp[0]=='0'))
{
if(num == '.')
{
temp[k]=num;
LCD_Write_Char(1,0,num);//輸出數據
i++;
k++;
}
else
{
temp[0] = num;
LCD_Write_Char(0,0,num);
}
}
else
{
temp[k] = num;
LCD_Write_Char(i,0,num);
i++;
k++;
}
}
}
}
}
void ReadIr() interrupt 0
{
unsigned char j,k;
unsigned err;
Time=0;
delay(700); //7ms
if(IRIN==0) //確認是否真的接收到正確的信號
{
err=1000; //1000*10us=10ms,超過說明接收到錯誤的信號
/*當兩個條件都為真是循環,如果有一個條件為假的時候跳出循環,免得程序出錯的時
侯,程序死在這里*/
while((IRIN==0)&&(err>0)) //等待前面9ms的低電平過去
{
delay(1);
err--;
}
if(IRIN==1) //如果正確等到9ms低電平
{
err=500;
while((IRIN==1)&&(err>0)) //等待4.5ms的起始高電平過去
{
delay(1);
err--;
}
for(k=0;k<4;k++) //共有4組數據
{
for(j=0;j<8;j++) //接收一組數據
{
err=60;
while((IRIN==0)&&(err>0))//等待信號前面的560us低電平過去
{
delay(1);
err--;
}
err=500;
while((IRIN==1)&&(err>0)) //計算高電平的時間長度。
{
delay(10); //0.1ms
Time++;
err--;
if(Time>30)
{
return;
}
}
IrValue[k]>>=1; //k表示第幾組數據
if(Time>=8) //如果高電平出現大于565us,那么是1
{
IrValue[k]|=0x80;
}
Time=0; //用完時間要重新賦值
}
}
}
if(IrValue[2]!=~IrValue[3])
{
return;
}
app=1;
}
}
復制代碼
所有程序51hei提供下載:
計算機.7z
(29.38 KB, 下載次數: 16)
2020-9-20 18:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
blai
時間:
2020-9-19 16:26
歡迎提問
作者:
51hei團團
時間:
2020-9-20 18:07
能分享一下原理圖嗎?
作者:
blai
時間:
2020-9-26 02:22
51hei團團 發表于 2020-9-20 18:07
能分享一下原理圖嗎?
原理圖照著單片機的焊就行
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1