找回密码
 注册
关于网站域名变更的通知
查看: 246|回复: 0
打印 上一主题 下一主题

51单片机的红外计算器程序源码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-10-29 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机的红外计算器程序源码4 a: I, A; y) y
lcd1602和单片机接口自己在程序中看
) ^) _1 _2 ~! d5 ~单片机源程序如下:3 D! s( g7 v' _2 o% H

: I0 L, R+ {2 k5 h: P

& {' y; ^: G' `# K3 d4 G#include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
) n. V+ g. v" Q( S& G#include<intrins.h>
* X1 M) i( {! g4 R, T& c/ h: Hsbit RS = P1^7;   //定义端口0 H. B) i3 _5 ^( ~* Z1 a* A
sbit RW = P1^6;: _9 t5 B+ T4 E  D7 M. O
sbit EN = P1^5;, z7 E" x$ j4 E# ^
sbit datk=P1^2;4 I' s" Z- M* @
sbit rest=P1^3;
$ Q( I: ^# M3 h+ u' L7 l9 S  osbit IR=P3^2;//中断0,红外接口                                                                                                                                                                                                                                                                                     //红外接口标志% S0 a4 |- X' C' i$ s' E
#define RS_CLR RS=0          //选择指令寄存器
; A0 G; U& \* [6 s  n  V% s: l#define RS_SET RS=1          //选择数据寄存器& ^3 e6 _( q) H7 Y6 o- f! Z# E# w, ]
#define RW_CLR RW=0          //把单片机数据写入lcd
+ y4 A. n# {- N; r+ v8 n#define RW_SET RW=1          // 把lcm的数据读出到单片机% p4 d( T5 Z+ P% S
#define EN_CLR EN=0          // 允许对lcm进行读写操作
9 @+ K' M4 j5 \: Y' F#define EN_SET EN=1          // 禁止对lcm进行读写操作: r+ u3 P3 q9 |+ W) O6 Q+ y7 B
#define DataPort P2 //定义数据端口 程序中遇到DataPort 则用P2 替换
9 R) }, e9 P$ d9 v/ v4 A/*------------------------------------------------+ s4 O  ~: K' K/ d+ n2 H9 Z3 y8 R
                全局变量声明
- M" A/ Q5 Q  {------------------------------------------------*/% T. r2 z! S% L" o- [
unsigned int p=0,flag1,qingchu;
7 I0 e+ g9 y- o( f4 } static int a; //静态变量a7 @$ L$ K! ?$ K# w; j: f. e
unsigned char table1[4];
3 N- `, t: N2 {1 f9 U4 r3 qunsigned char  irtime;//红外用全局变量
3 F5 J4 v4 W3 j) Q
1 W9 e* B0 ^9 o8 B3 y& v9 a" {bit irpro_ok,irok;
& O) M3 c" N5 eunsigned char IRcord[4];     //四组数据,
$ b* n5 x# G( }# punsigned char irdata[33];        //前导码加32位数据0 T) Z( H# \8 O1 r
unsigned char dat[] ={'0','1','2','3','4','5','6','7','8','9'};: G6 K+ i7 A% `2 z4 n
/*------------------------------------------------
- d" M; X0 N6 W" u3 o9 s                  函数声明7 `0 x- A# x! X2 j
------------------------------------------------*/
, J3 n# I  x8 ^4 V( v. a7 O% S& q' V, _; x3 |6 g
void Ir_work(void);          //红外键值散转函数
& ~$ P2 e# w. }' K# L5 U' {+ K) Svoid Ircordpro(void);  //红外码值处理( H+ ^0 ?8 m2 Y# Z' t
void Delay10ms();                //延时函数+ o# [! F* `) u# Y" {$ B. ?2 G
void delay1ms(void);           //延时函数* R0 S* n7 A  Q, X5 g4 q2 @, d3 n. b
void music(z);                        //语音函数4 [+ X7 r7 ?* o9 O; S. q
/*------------------------------------------------
: A2 ~5 D/ X# c6 P uS延时函数,含有输入参数 unsigned char t,无返回值+ ^/ g- u/ j/ Z1 v2 v! C3 @9 [
unsigned char 是定义无符号字符变量,其值的范围是
4 a" [" e: S* x3 ?  k* [ 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时  z7 D: Q" X) d9 S2 T
长度如下 T=tx2+5 uS
& Y% \% A* O1 _5 k6 a8 l------------------------------------------------*/$ {, E" o$ o; B$ j3 T$ s
void DelayUs2x(unsigned char t)
- C! C* `+ m% C& O/ I4 Z2 g) l{
3 w4 u( X' Y! i' I while(--t);
7 H1 ^! ?1 f4 |  N2 m% J}% H5 Q8 {3 H5 R( H. ~) |
/*------------------------------------------------2 s& E; p. }* g; d3 c7 E) J6 I
mS延时函数,含有输入参数 unsigned char t,无返回值
: C  `  D/ s; x$ o) W* W  q, U unsigned char 是定义无符号字符变量,其值的范围是
3 E3 F; i* ~! B  `8 Z8 h7 z& c 0~255 这里使用晶振12M,精确延时请使用汇编
7 Y6 ?* i+ r8 P$ n3 n7 i5 \9 u------------------------------------------------*/# Q+ c4 n; q2 ]5 D
void DelayMs(unsigned char t)6 S: D6 m, p6 \. `# r
{
, g) ~5 y7 ]. m
4 h& @& @0 j# V) A6 j& I1 {/ x while(t--)4 g5 W! f6 P% p( B
{+ @! X( Q! h. B: [
     //大致延时1mS
# [5 Z1 \/ X4 A6 W: }# y. q, v     DelayUs2x(245);. J% G4 E  S0 r6 i
         DelayUs2x(245);! @( h& P) C6 ^8 m* x
}  Q; @% {8 @2 b9 b9 y/ H, {
}! A& \: J$ O1 E: f
/*------------------------------------------------$ _2 z* Z# c) u, j6 I9 P( C
              判忙函数
) C7 ]( T1 C) R" r, r------------------------------------------------*/) L; J* m# {6 i8 v  E
bit LCD_Check_Busy(void)
  d+ S7 E; E, g& ^7 X {
5 Q5 V( \. x+ c DataPort= 0xFF;  U" d# J- h6 x, w- a
RS_CLR;     //选择指令寄存器4 ]  ?- i* ?6 k( B2 V+ y4 @* U
RW_SET;         //把lcm的数据读出到单片机
1 ~' Z/ O  `& b& D( ] EN_CLR;         //禁止对lcm进行读写操作 % e& c: w8 Z4 _0 }" Z1 x/ g
_nop_();9 K3 c3 i) l$ L8 R# |
EN_SET;
' D" R2 g; K4 t1 e* r  h1 q- V6 g* C return (bit)(DataPort & 0x80);
/ G7 m1 s) M/ M7 \. E  u }
# R) S* F  Q1 K* ^! G1 p8 H/*------------------------------------------------$ Y! `. Y; j* K+ w
              写入命令函数
7 b+ h3 V* w5 o4 z% [& i, d. C9 s------------------------------------------------*/9 M; }  s3 g/ C7 e1 \5 Q: U
void LCD_Write_Com(unsigned char com)
% D' d! S- K; s& Y {! M8 o+ {9 {; J% d; S" K. }
while(LCD_Check_Busy()); //忙则等待
% W, f  O; f8 _6 q; m2 j! R$ s' a- \ RS_CLR;5 `% s' E3 w  w/ A- |: ^
RW_CLR;
5 h, z4 T, ~1 L; @! w9 ^' g7 E EN_SET;. o  `6 r5 x( {! Z! K8 T) ]; @5 y
DataPort= com;& [* ]0 T8 f. f3 x5 q
_nop_();
/ n- V4 T, ~9 R EN_CLR;
. v  x! \4 |+ }+ w! D3 @ }
0 o1 l% @- Q5 q/ H8 W  ]' n, F$ H3 T& {$ ?/*------------------------------------------------
* I$ Z% x# K; Q7 ]& H9 ]4 |              写入数据函数3 \* o1 W0 K  E2 r  h% x) m
------------------------------------------------*/
0 V% K8 n# E/ C! x void LCD_Write_Data(unsigned char Data)
5 }/ v  Q3 q% e+ g$ l" `4 v {9 k9 r$ ^$ }9 B& U
while(LCD_Check_Busy()); //忙则等待7 m( I; M+ x4 e+ F2 C' h
RS_SET;# r' H9 p  o9 N
RW_CLR;
4 |+ i9 ]  l3 K) o8 w EN_SET;+ K5 q# Y+ c) W4 N7 }+ {$ \' U
DataPort= Data;+ ~/ }/ `2 I' B+ F. N5 C' `9 ?
_nop_();9 \/ u; C1 E+ N! D  e! q  V$ y8 Q" ~. y
EN_CLR;
3 L! M* P6 n( I4 N; i }
4 C# s. r, o1 `+ w
/ G. L1 S2 S0 a* z2 n% H4 M/*------------------------------------------------
: j5 g1 [  ^9 q. `                清屏函数
+ N; V1 l+ G6 N* {------------------------------------------------*/* o7 V8 ?6 _, |+ D+ D6 E( t
void LCD_Clear(void)* [, _! {5 |, ?0 h( }" a
{7 H& P, P9 Z5 [# r; b" x, h; O
LCD_Write_Com(0x01);
3 h1 X( [- i* u4 s  Z0 k8 y5 O# E DelayMs(5);0 `6 @: J/ b; }3 ~' m
}" @2 u9 o6 ]5 j% w2 W9 w

, C  L/ b! B( j/ g% v* C/*------------------------------------------------/ C+ K9 w6 w) v$ W7 o2 u
              初始化函数0 R. n/ P9 o+ m) r% W4 e$ |3 Z
------------------------------------------------*/% \& m- a- v1 j, Q! Z1 M
void LCD_Init(void)* }! s: |& B1 ]" a2 g
{7 B# I. V' i! L: ?2 K( _
   LCD_Write_Com(0x38);    /*显示模式设置*/, r8 G. P' a/ d# K
   DelayMs(5);
/ \7 p6 g! i* {. o. x  [   LCD_Write_Com(0x38);
: B* N% k2 |. @   DelayMs(5);
. W& m& o9 ^9 @: P9 H! {   LCD_Write_Com(0x38);
' E- m9 T* a( M& V$ J2 \   DelayMs(5);; X3 \' E1 a& \. A  f. p3 S
   LCD_Write_Com(0x38);, r, n2 _* f, p: b" A
   LCD_Write_Com(0x08);    /*显示关闭*/% g- E3 B6 c, c% F  ^* d2 Q
   LCD_Write_Com(0x01);    /*显示清屏*/2 m, w4 c9 T* u' r
   LCD_Write_Com(0x06);    /*显示光标移动设置*/& T6 D8 b) v4 E% W* ~
   DelayMs(5);
/ y& `) @3 n" _. I   LCD_Write_Com(0x0C);    /*显示开及光标设置*/
; ?- h/ L0 i# j! \, ~- Q   }; H' U2 P, Q/ w% P; K

4 ]2 y1 Y+ \/ m% Z3 X; p' K7 J/*------------------------------------------------
+ G+ e/ q5 a+ K! e                  定时器0中断处理' [" G1 c4 G1 G% ~: e8 `( q0 z
------------------------------------------------*/
* @7 j' |+ ^" N3 [3 v
" o& \( s  C: Q# Rvoid tim0_isr (void) interrupt 1 using 1
" N9 {/ W8 F7 h4 D{
+ k4 t6 n' h$ m7 r7 F  u  irtime++;  //用于计数2个下降沿之间的时间% ~8 m# r6 |% |1 A' n
}
9 E' H) h1 p) Y' j3 O+ G- J: ]1 t
3 f4 l( b2 d0 x  Z. s% g$ p/*------------------------------------------------& e' E# K* G. C
                  外部中断0中断处理* Q" m, t1 i* D1 r; o# V+ W
------------------------------------------------*/
8 ?8 q# r4 C' _, Bvoid EX0_ISR (void) interrupt 0 //外部中断0服务函数
& |2 c. Y! a" B4 }+ t( `5 ?/ G{9 m7 f& Q! |# u  L5 [
  static unsigned char  i;             //接收红外信号处理
# W; p+ Y9 m+ a  static bit startflag;                //是否开始处理标志位6 c& \  K+ V: |& T8 }7 o6 i
# I4 h8 j4 d" F; k$ q- j1 T2 L
if(startflag)
$ k8 E0 E/ H1 j1 m: m& M; O  j$ C( G# ?   {
; X, M: d# o4 N6 U3 c: d+ Y    if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms# x9 i! ]. P+ ?, j/ @# b8 a
                        i=0;7 G+ J( T6 j, ?- ~
                    irdata=irtime;//存储每个电平的持续时间,用于以后判断是0还是1" O; ~4 q" `9 C/ A& E
                    irtime=0;
4 b- h* E  T  i( m& {* [1 ?  n! t                 i++;
& `( `3 T1 C9 G                            if(i==33)7 O* f$ f7 ], h, Y
                              {9 g! F. B9 i2 A2 E
                                   irok=1;
9 u. H  g& f! p! ^% G                                 i=0;
% z" @9 z4 q9 G4 y5 q+ v                                  }
0 P% O1 C1 o! ]5 w          }
: ~0 A  x* T& U2 w           else
$ e0 ~; P) I- ^: o# L3 d                {
/ H/ E( y. U! Q: P                irtime=0;+ d* ~  s6 @- B0 a; y
                startflag=1;! T2 i0 |- V) [) ?
                }
: O' \1 J: F$ K  V9 @6 `+ B% {! A  G, R8 O% [  ^
}
+ T7 X3 v& c& n* @, ?" V/ U  X6 n* e6 K/ t
+ Z' e+ u4 J5 R4 g' J# @0 q4 [

9 T/ Y: e4 U2 F% s1 svoid music(int z)
3 A5 K% g# ?; x{
. E; l! y/ G  o1 I0 e; Grest=1;: U9 N; ~' V( B5 J* l+ q! Z  v
delay1ms();$ B) v+ k9 Q# K: F  v# H$ j
delay1ms();
7 k: O! B1 S# G7 n* irest=0;
) M& t/ G/ A0 {: B( P$ o0 }delay1ms();
) v( M& B7 p$ o$ idelay1ms();: O6 d! ?6 \% \  @4 ~  q6 V
            //前面给语音复位,详情看语音资料$ ?4 K& p) o3 G' ]
while(z>0) //给b 个脉冲让语音播放b段语音
- d1 `) Y' v2 \3 j. _$ L' `{0 ]& E  U9 |# m$ H" K! e; N3 E( K
datk=1;$ B+ s9 t  `6 C0 h
delay1ms();
. t- V/ X& P: F$ t1 Edatk=0;
. O* D& D" `  p1 k, K# \* {delay1ms();
+ I7 w( W+ G0 ^* u& iz--;
; p# y9 `# f% ~) l$ ^}         }
6 s2 f# Y  |4 u0 l//************************************************************1 ]4 y- U1 [: N7 y
void delay1ms()
5 E  I- g( ^/ h. ^4 ^3 D1 g4 A3 o{* b, c) f% c0 V: o
         unsigned char iii, jjj;
: n$ `9 B. {  g/ H1 _, A  N  o5 H! ]1 ^0 B- c
        _nop_();3 P. d" S  V- |( ?
        iii = 2;7 U6 ~, X7 S% e6 h/ ~) ?( J; ~1 Y
        jjj = 199;
1 m% ]0 ~$ D* h! s# s( F        do, j; ]  ?+ B# _# k; _
        {' m4 R. {& e! Y5 H! m
                while (--jjj);7 ]6 x/ p5 r! n3 ?- ]4 Q
        } while (--iii);
9 H" t1 u' V3 y' Q% l! h; E3 n! I; O}& Y  W! X; @  G% D7 P/ E
void delay(void)   //误差 -0.000000000227us4 w" |4 w0 ]* O) F
{
# [' [+ f4 _! ]5 ^. g    unsigned char a,b,c;4 Q+ L  _8 H+ Z" M0 H
    for(c=13;c>0;c--)# j/ k5 g* W, o, }( V
        for(b=247;b>0;b--)% f! }6 z' f1 |4 \" g
            for(a=142;a>0;a--);% d. |* D" s, \+ ]/ z) X
    _nop_;  //if Keil,require use intrins.h$ {2 U9 E# o( g# g
}
) O* d4 W- K1 ~# g1 t! h4 t7 [. ~5 o( E
& t# f, {0 ~  p+ v. d0 {- |

1 t' k& i# w8 }' M* E7 l" p/*------------------------------------------------
' J1 F) q) j9 V  \% m5 D) F3 L6 c                定时器0初始化0 d/ v! y7 q) [
------------------------------------------------*/3 r+ x4 {' _/ X6 V  [& g0 c7 g3 Z
void TIM0init(void)//定时器0初始化! t" @( d1 n4 f8 u, v
{8 D$ c$ _5 j4 y* z, [
, N# W1 r0 @6 O1 o4 ~1 G
  TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
& t4 K; [6 c7 K- x* n1 H  TH0=0x00; //重载值
2 e1 l, G: w; ?# l: M' l7 c0 p  TL0=0x00; //初始化值9 J9 Y4 y6 X. j( n7 u/ U) Z/ v1 p
  ET0=1;    //开中断
# D) [. @* [; S5 }/ [& B2 g) S4 z  TR0=1;- E4 F# o0 c9 r1 [
}        
, j& \+ @8 }3 Q9 P7 _9 a8 O/*------------------------------------------------
8 d+ w. `0 N/ i& t                  外部中断0初始化
0 `% K+ ?2 \! Q2 w' H% K1 N) A------------------------------------------------*/- Y2 g% B& ~' a
void EX0init(void)& p9 V$ i$ u1 a
{
& t  _; d+ L9 t9 f IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)# w' @( J( t2 g4 u1 c
EX0 = 1;   //使能外部中断
& {1 R/ X7 l' F" c* t9 D" O9 f EA = 1;    //开总中断9 ~3 Q6 l( }! Q& F  E& N
: D1 O8 v  _$ z. B0 \5 F: U7 D
}" A/ Z. P3 |0 s' I! V; }2 }
/*------------------------------------------------  W, e$ C( h% u; S4 h
                  键值处理. B9 h' R. B# v- O
------------------------------------------------*/; {5 \8 V0 h  E8 Z  k% W; L8 z
int display(int j)
0 Z8 Z% N0 z* _( i$ @+ P{5 L3 Y0 H' T. F' j: E7 W
        int k;
/ t' r; u* \' ^        switch(j)//判断第三个数码值9 \0 D5 C: c# L
                 {/ g$ B. L5 ~+ ^0 t1 j* s$ Z7 k! {
: a4 ]5 H0 L" a' ?0 {# y
                         case 0x16CD_Write_Com(0x80+a);LCD_Write_Data('0');k=0; a++; break;//0   
! ?1 ]% C( P( K0 b                         case 0x0cCD_Write_Com(0x80+a);LCD_Write_Data('1');k=1; a++; break;//1 显示相应的按键值
9 G  s  w' B$ @  b; D                         case 0x18CD_Write_Com(0x80+a);LCD_Write_Data('2');k=2; a++;break;//2  d/ e6 ]) o4 t4 X
                         case 0x5e:LCD_Write_Com(0x80+a);LCD_Write_Data('3');k=3; a++;break;//3. l0 e& c3 j+ @8 u# C
                         case 0x08:LCD_Write_Com(0x80+a);LCD_Write_Data('4');k=4; a++;break;//4         / X" L. G! x+ h# J
                         case 0x1c:LCD_Write_Com(0x80+a);LCD_Write_Data('5');k=5; a++;break;//5  ; B0 `" I6 U  ]) x% A  T/ l4 q( j
                         case 0x5a:LCD_Write_Com(0x80+a);LCD_Write_Data('6');k=6; a++;break;//6 显示相应的按键值
" _. [, a8 F5 c( z2 e- ~4 l' O, w                         case 0x42:LCD_Write_Com(0x80+a);LCD_Write_Data('7');k=7; a++;break;//77 `: p5 w( |: U' p# P9 X. Z
                         case 0x52:LCD_Write_Com(0x80+a);LCD_Write_Data('8');k=8; a++;break;//80 N7 T: k# ]9 ?) ]
                         case 0x4a:LCD_Write_Com(0x80+a);LCD_Write_Data('9');k=9; a++;break;//9  a% y; P/ G6 l& ?! [+ G& u3 t/ U; H
           }
6 W  i0 i& P* B/ |) k  l( W$ T" \1 h4 s! z- x
        return k;4 c+ r  J0 K0 `: \  b
}& \: E+ w% I3 q- f) b
- J5 }- P( ~' @+ F. |; s
void Ir_work(void)//红外键值散转程序1 U9 T- f9 f* y
{
% z- D5 [- ?5 |3 b& z# y7 Q2 b0 Q9 }2 U- f! l# h
         int k=0,flag1,count1,count2,count3,count4;
% j4 W0 l) I" U& c  R( V# P9 B5 c         int table1[6];
' O1 y7 }+ _# S2 S' {2 w         int count;
& V: ~% i" O5 A& I         if(IRcord[2]!=0x09&&IRcord[2]!=0x44&&IRcord[2]!=0x15&&IRcord[2]!=0x40&&IRcord[2]!=0x43&&IRcord[2]!=0x07)  C* U. ]# z% u) _, Z8 I! J
         {+ k# t8 B3 J0 ^! k9 J6 P* k
         k=display(IRcord[2]);- }7 v3 g0 |1 J. Q+ q
         table1[p++]=k;
3 S1 }2 }0 K  C: j) F7 u         }
( k, V8 {' Q9 F        else  if(IRcord[2]==0x09||IRcord[2]==0x44||IRcord[2]==0x15||IRcord[2]==0x40)
  V6 u' B9 g' s& s4 l2 q         {% f( A0 D: E4 E( h9 q: W( X
                 switch(IRcord[2]). }4 f0 ?% N( I# |1 a% j/ P
                {
( d6 ]/ I, f9 C7 t( |  J                          case 0x09:LCD_Write_Com(0x80+a);LCD_Write_Data('+');flag1=1;a++;break;//+  $ s$ F! y& B- s( l
                         case 0x15:LCD_Write_Com(0x80+a);LCD_Write_Data('-');flag1=2;a++;break;//-显示相应的按键值
( j* U& Z9 D. q( i4 E                         case 0x44:LCD_Write_Com(0x80+a);LCD_Write_Data('*');flag1=3;a++;break;//*
2 [* ?( \% _) p                         case 0x40:LCD_Write_Com(0x80+a);LCD_Write_Data('/');flag1=4;a++;break;///' A3 x1 `8 H% ]2 c  A
                        //case  0x10:" e( |4 N, A+ j4 S3 i) G+ c$ m
                }( @  j. O& K4 S4 X! T6 L
         }
' B0 P" {) |2 t* `        else if(IRcord[2]==0x07)
+ G, G+ D2 m# l! R- y% i* A         {" r2 I. R" T! c$ V
                         LCD_Write_Com(0x80+a);
2 d" A$ z/ X) R' `6 L                        LCD_Write_Data('=');
) w+ \$ P/ l5 V# ?                         switch(flag1)9 H. j! |( x* c5 k, z
                        {
  i- J2 P9 c- h" m5 {3 y                                case 1:        count=table1[0]*10+table1[1]+table1[2]*10+table1[3];
& y6 E% v) e& F                                if(count<100)* D5 J- W6 L8 E' @) ?
                                {
2 @/ i' H: ?2 Y, W8 w; W8 c9 l                                        count1=count/10; , H: W1 }, F! |  c  \7 L
                                        count2=count%10;  
5 F7 E) b% n# p3 t                                        LCD_Write_Com(0x80+a+1);6 v+ O( Q2 `' V) L
                                        LCD_Write_Data(dat[count1]);
4 F/ a7 e" P0 Y( I( L) ~! c2 f3 O
$ R; Z7 L& d1 z" X, q                                        LCD_Write_Com(0x80+a+2);
7 ^3 Z* ~+ ?4 z                                        LCD_Write_Data(dat[count2]);: `6 n' e% D6 J* L
                                        delay();
" Q. V( D- |3 \1 I+ q                                        music(count1+1);
, N, f0 `& Y, _  K$ C! S5 M                                        delay();. V; {% ~5 d3 A
                                music(count2+1);
. \, o% F' a; |( g                                        delay();
! u% n; c6 J$ e' A- B$ {3 _7 y/ ?                                }1 w# d* M5 }0 z; W" z4 V
                                else if(count>=100)1 L/ X. X. ?' ^+ H5 ?) k
                                {" B! C+ x2 S: \* ]( Y9 a
                                        count1=count/100;         LCD_Write_Com(0x80+a+1);LCD_Write_Data(dat[count1]);
' g: P: g& K, f. K                                        count2=count/10%10;         LCD_Write_Com(0x80+a+2);LCD_Write_Data(dat[count2]);
) v: }' D9 e2 L  d                                        count3=count%10;         LCD_Write_Com(0x80+a+3);LCD_Write_Data(dat[count3]);9 |7 V7 ]4 R* u( b4 w# |0 ]  H
                                        delay();( {0 v( v5 W8 p' N- v* M8 b' \; Z
                                        music(count1+1);
+ Z. }7 T7 J1 K4 i2 R9 g                                        delay();1 M$ f% k, x+ O' N, Q
                                        music(count2+1);
; p2 |( q( _, [( M0 ?) I                                        delay();0 i$ |5 |2 d2 g/ t
                                        music(count3+1);
, g) j- b+ g$ v3 |8 p1 n& U                                        delay();* x  g  r8 H9 x
                                }$ @* y0 M3 R. y7 M0 z
                                                                break;2 v2 V% t4 G/ Y3 v" E+ Y. V
                                case 2:          count=table1[0]*10+table1[1]-(table1[2]*10+table1[3]);0 B5 j" J1 _7 W6 G0 }6 w8 d
                                                count1=count/10;           LCD_Write_Com(0x80+a+1);LCD_Write_Data(dat[count1]);
% B) E% o. M2 `. U5 _. J. E# W3 \9 C& |                                                count2=count%10;        LCD_Write_Com(0x80+a+2); LCD_Write_Data(dat[count2]);8 G+ t' I; g& o- i/ n, d
                                                music(count1+1);7 [& N1 r" \) Y) n7 d0 O; K
                                           delay();
  l) b7 Q, I- O) S; Z                                           music(count2+1);
2 Z0 N: z& k7 [2 D                                           delay();* `2 y$ _3 }# ^* O3 N
                                                break;/ V, a' e& b) a( r

3 n+ Z' F  [3 b5 P
" B! t* T* a9 ?( V) G6 g                                case 3:count=(table1[0]*10+table1[1])*(table1[2]*10+table1[3]);1 h/ m  m/ F% f8 q! H. G$ W& y' J! v
                                        if(count<10) { LCD_Write_Com(0x80+a+1);LCD_Write_Data(dat[count]);}
4 Y3 |; e9 H# |1 F. N1 H                                        else if(count<100) * P1 L' r) ~, b# x
                                        {8 r# w! a* k* |' @7 i
                                                count1=count/10;  LCD_Write_Com(0x80+a+1);        LCD_Write_Data(dat[count1]);5 h3 j8 \! [4 k/ L2 ^$ _
                                                count2=count%10;   LCD_Write_Com(0x80+a+2);        LCD_Write_Data(dat[count2]);( S1 O7 {* Q; J2 K- p
                                            delay();
$ L' P8 N; o6 Y+ Z' P                                                music(count1+1);" Y1 W6 R) b6 w  T  M5 s
                                            delay();7 ?0 n) F9 v4 I
                                                music(count2+1);
1 J: k4 j; P7 _, i$ G                                            delay();
- p/ |* x0 V% Q4 [4 \                                        }
, Y1 \7 j0 s7 ~9 [
$ l, Y7 f6 ^3 j9 q0 v. i1 H- o5 V/ ^' b                                        else if(count<1000)
" U. \& o) j9 J4 _                                        {; t7 U4 V6 f( G5 W  A6 }7 r  W' z
                                                count1=count/100;        LCD_Write_Com(0x80+a+1);        LCD_Write_Data(dat[count1]);* ~: c# t4 p, A) h$ A* K4 _3 v
                                                count2=count/10%10;          LCD_Write_Com(0x80+a+2);        LCD_Write_Data(dat[count2]);
" l, {8 E/ W# I                                                count3=count%10;          LCD_Write_Com(0x80+a+3);        LCD_Write_Data(dat[count3]);! `1 A% w% t& T( z- ?/ Q$ q& Q
                                                delay();$ z" V) B/ E; v8 {1 p
                                                music(count1+1);9 m% ~% g0 g. _- o/ n
                                            delay();
4 r* V- F# Z+ k                                                music(count2+1);
/ q' i. u& a8 u8 C* S1 E0 V                                            delay();
1 C* Y$ {) R& }0 M# a+ Z                                                music(count3+1);0 [  T2 d; t$ V4 [) R& v! `
                                            delay();
  b8 u- _# r' F+ b/ Q                                        }& T# Y, F4 h% I6 t' L
                                        else   if(count<10000)
) K$ b) I1 p, K                                         {
9 Y) f# V8 i9 S8 |, l# z                                                  count1=count/1000;                   LCD_Write_Com(0x80+a+1);        LCD_Write_Data(dat[count1]);
+ s& o  @# h  |4 _                                                count2=count/100%10;          LCD_Write_Com(0x80+a+2);        LCD_Write_Data(dat[count2]);
6 q9 {- d0 y& `6 ]- K- J7 ~                                                count3=count/10%10;                   LCD_Write_Com(0x80+a+3);        LCD_Write_Data(dat[count3]);4 k8 R3 @0 C6 P3 M
                                                count4=count%10;                 LCD_Write_Com(0x80+a+4);        LCD_Write_Data(dat[count4]);
2 |$ {7 x* k. ~                                            delay();9 d7 w/ f5 v2 ^( ?
                                                music(count1+1);* K0 n" U! K. \" U2 m. ?/ `
                                            delay();# b' m( I- l6 d  R+ `3 b
                                                music(count2+1);& |* W# ~* d" @9 }
                                            delay();
8 ?6 a9 V# s. m, }                                                music(count3+1);
  N6 {1 `) E" r3 U                                            delay();
: a# h! W( P% D( t0 e& t! S                                            music(count4+1);
% w$ z0 a9 O5 Q) H$ ~4 b) N                                            delay();
$ b% Q/ B  \5 b  b6 A$ `( C                                         }0 c; d( |# ?/ G
                                                        break;
2 i. @7 y1 t' @6 m* [9 H                                case 4:                count=(table1[0]*10+table1[1])/(table1[2]*10+table1[3]);, v, C* ^4 q/ E# ~. R  W5 q

- T2 ?1 t3 ?5 x8 h- ?+ a, n2 n* }- ^+ s9 F# K9 H) Y

0 [- @3 M% ^$ ?2 K                                 if(count<10)! T6 g- v  G  g1 I, K$ q
                                                {                                                              % e/ ~6 Z- ?) x8 g# w
                                                  LCD_Write_Com(0x80+a+1);LCD_Write_Data('0');        //LCD_Write_Data(dat[count]);
4 U% ^! n! {5 z                                                  LCD_Write_Com(0x80+a+2);LCD_Write_Data(dat[count]);7 @; B6 G5 ]* \  A
                                                  delay();  I. k1 M& J1 e1 l1 o- ]
                                                  music(1);
4 c1 ?) n5 B3 J- f                                              delay();( p  S4 V# C$ y9 G% K0 }; J
                                                  music(count+1);
) x" ~5 w# V$ e# G$ h                                              delay();
' M8 P; ^7 s/ U- G" X. v                                                }- p6 Y! n% }! Q  [
                                                else  & _6 y. V  n) E) D' z* c( B# O' Z  u
                                                {
& V5 g- ~* {( P; j2 r! X! a                                                        count1=count/10;  LCD_Write_Com(0x80+a+1);        LCD_Write_Data(dat[count1]);/ q0 [& d0 G/ U& D3 n
                                                        count2=count%10;  LCD_Write_Com(0x80+a+2);        LCD_Write_Data(dat[count2]);
" |1 {% r# @. P$ M' S7 I& I% ~                                                        delay();5 x" @  C, `5 J& z
                                                    music(count1+1);
. G! b$ I. ]6 {% k                                                delay();
: n+ ^: a7 g) g* ]                                                    music(count2+1);, {3 Q+ n) b+ B# K
                                                delay();. A: Z7 F, Q' l
                                                }           , I( v9 I! Z# B9 o: ]- |( T, |
                                                break;, i+ Z, i+ `. V# a
                        }  }$ V' N, V* m3 U6 [2 h
                        flag1=0;
6 k8 ?- Q$ f4 L0 m         }
9 m+ Y3 b' G; v  {# s         else 7 Q4 m! ~( F/ U  U  ^$ N9 P8 k
         {/ m8 E) s" x1 _  Z) F
         if(IRcord[2]==0x43) 8 C: J+ D6 h& D( \/ C0 S9 W1 I5 Z- h
         {
2 Z/ _! N& |# o4 W" b% h                LCD_Write_Com(0x01);
( X1 ~8 Q) G9 I  F6 `* s* v         qingchu=1;, @- h5 d2 b  e2 J
) e1 l  H6 y% D$ K
         }9 N0 I% s! B+ Z% w1 P
}        - L" E% b: M8 o7 `

. E. K) a8 X/ X0 C# B, v& u
% j) f2 v0 l# {+ ]  F; N3 ]}% J% }$ |: q% B
/*------------------------------------------------
4 b% u, T5 _& u4 r4 V" D6 W  n( ^' y7 w9 s                红外码值处理0 X" U. H3 ~; J6 ]
------------------------------------------------*/* `+ B# d. y, C6 Y+ ?
void Ircordpro(void)//红外码值处理函数/ u+ w" D3 Z3 W8 r
{
0 Q& W2 ]  G6 t- s' E  unsigned char i, j, k;
8 f) p6 ]7 q9 [, v) k. [  unsigned char cord,value;5 Y/ s: ^# N2 ^7 x( {. [' J
& S7 I. U$ _- y
  k=1;
8 o0 T  C) Y( n, b" u% q, N  for(i=0;i<4;i++)      //处理4个字节$ x7 \! ?( X; ^8 U+ J
     {
9 ]4 d  F( i7 m: X1 ?      for(j=1;j<=8;j++) //处理1个字节8位, D  ]$ i5 g9 R! M
         {
8 M  t8 @9 K% \7 j6 P          cord=irdata[k];3 o4 B# _# B% Q6 N3 y- T6 l3 t8 L
          if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
- M& E- z8 \* P5 L) t+ _* F9 U6 u             value|=0x80;3 E* `' i4 v$ p( B
          if(j<8)$ U5 v5 Q: i& ~/ N$ C
                    {( O$ e( R: _% Z+ N4 j
                         value>>=1;
6 H% q4 S, p. _# F5 O' R  A5 W( p0 @                        }6 D9 X( M" y2 g0 h' {
           k++;3 @2 y/ N$ P; ~3 n
         }
4 W& w/ Q6 ~5 M) c- q+ L* ]     IRcord=value;: B2 e) o! X" N: l$ l0 n
     value=0;
9 g, m2 H+ P' @# L7 H% Y     }, g/ I* x! P0 f
         irpro_ok=1;//处理完毕标志位置1
# X# u* L" n2 j) E}
4 A& }& U& _# }
3 r% y* W6 M6 ^  g, Q4 M* @/*------------------------------------------------. t0 D; k. I0 o1 S
                    主函数+ g# N! ?# X2 Z
------------------------------------------------*/
( y8 A. w( w  e/ N2 q" [& q. ]5 N$ ?4 qvoid main(void)! ]' C8 _2 E4 V# l3 {
{
7 P  X/ f4 Q7 q8 t/ j' @  q) Lint m;
$ k- }! h0 s  _ EX0init(); //初始化外部中断
; f$ F+ S- x! Q1 L, w TIM0init();//初始化定时器
; ~; `. s! I; ^' R7 h LCD_Init();
: J* r, e; `7 jLCD_Clear();//清??( L5 x! l( s* C$ D# M5 p8 w

% P2 d7 Z, G: l+ s while(1)//主循环% O2 H/ d" B, ^1 u# z* s
   {
. J$ `. E7 |; J& s) [    while(irok==0);                        //如果接收好了进行红外处理
. U) m) _- G; W" O, G                 irok=0 ;
; K  f8 C$ J' [1 Z7 ]0 K           Ircordpro();9 _6 N, B' q8 G% B, n
          while(irpro_ok==0);                   //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等' [" x+ x3 o0 I: W; B9 d6 h
                   irpro_ok=0;
! ^3 W' H8 J$ b2 w           Ir_work();
; p( p2 t! |8 P4 z           if(qingchu==1)
) e: }+ C0 G" e8 F           {% j0 y& n: A* y6 H0 g3 J9 `
                           qingchu=0;
. q3 H+ c  Z0 i0 v/ Q/ }) q7 s* h. r$ p                        a=0;, I+ p' a! q# T$ ~, Y( G. D. c7 |
                 LCD_Write_Com(0x01);
# U+ G# U7 _$ J5 S$ e' _% A                 LCD_Write_Com(0x80);
' ?( P+ r! A' _8 G3 `1 h2 M                        p=0;( t4 z, `5 K1 q: o9 @! C3 z$ s
                 for(m=0;m<6;m++)
$ x+ R- c3 O4 [$ N  k3 W+ x                         table1[m]=0;
+ `& C- c5 T0 D, m- b, n" H9 z           }0 m/ Q/ b' o, @: n: w- S+ k
        }
+ r5 l4 q. I6 O9 l- U        }
) Q4 x( x& u- N6 {- E: z; P9 I8 o5 i0 V. Q

, g) t: ~: l  e0 z: @$ G
游客,如果您要查看本帖隐藏内容请回复
# |+ Z, ]! W+ [5 `2 v; m

7 D$ L% O: Q; M- ~; T8 M/ N
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-6 15:23 , Processed in 0.203125 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表