找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1115|回复: 1
打印 上一主题 下一主题
收起左侧

红外与4*4矩阵综控的计算机以及16点阵程序

[复制链接]
跳转到指定楼层
楼主
ID:380546 发表于 2018-12-27 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>   
  2. #include"shuzu.h"
  3. #include<intrins.h>
  4. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. #define ulong unsigned long
  8. typedef unsigned char uint8;
  9. typedef unsigned int uint16;
  10. sbit IRIN=P3^2;        
  11. sbit MOSIO = P3^4;
  12. sbit R_CLK = P3^5;
  13. sbit S_CLK = P3^6;
  14. sbit P2_0 = P2^0;
  15. sbit P2_1 = P2^1;
  16. sbit P2_2 = P2^2;
  17. sbit P2_3 = P2^3;
  18. sbit rw=P2^5;
  19. sbit rs=P2^6;
  20. sbit e=P2^7;
  21. sbit led=P3^1;
  22. sbit dian=P2^4;
  23. sbit button=P3^0;
  24. sbit o=P3^7;
  25. uint8 key,num,k,biao,flag,fuhao;
  26. long a,b,c,d;        
  27. uint8 dat1[]={1,2,3,0x2b-0x30, 4,5,6,0x2d-0x30, 7,8,9,0x2a-0x30, 0,0x01-0x30,0x3d-0x30,0x2b-0x30 };
  28. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
  29.                         0xf8,0x80,0x90  };
  30. uchar IRCOM[7];
  31. uchar m;
  32. void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);
  33. void delay1ms();
  34. void delay(unsigned char x) ;
  35. void display();
  36. void delay1(int ms);
  37. void dianzhen(void);
  38. void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);
  39. void lcdwrc(uint8 c);
  40. void lcdwrd(uint8 dat);
  41. void lcdinit();
  42. void keyscan();
  43. void ji();
  44. void LD();
  45. void main()
  46. {
  47.          unsigned int  a;
  48.    dian=1;
  49.         IRIN=1;                           
  50.         IE=0x81;                 
  51.         TCON=TCON|0x01;              
  52.         dian=0;
  53.          while(1)
  54.          {
  55.                  if(button==0)
  56.                         {
  57.                                 delay(5);
  58.                                 if(button==0)
  59.                                 {
  60.                                         while(button==0)
  61.                                         a=1;
  62.                                 }
  63.       }
  64.                         if(a==1)
  65.                         {
  66.                                 dian=~dian;
  67.                                 a=0;
  68.       }
  69.             for(a=100;a>0;a--)
  70.    {
  71.      display();
  72.    }
  73.                
  74.                
  75.           }
  76. }
  77. void IR_IN() interrupt 0 using 0
  78. {
  79.         unsigned char j,k,N=0;
  80.         unsigned char q=0;
  81.         EX0 = 0;   
  82.         delay(15);
  83.         if (IRIN==1)
  84.         {
  85.                 EX0 =1;
  86.                 return;
  87.         }
  88.                  
  89.         while (!IRIN)           
  90.                 delay(1);
  91.         
  92.         for (j=0;j<4;j++)         
  93.         {
  94.                 for (k=0;k<8;k++)        
  95.                 {
  96.                         while (IRIN)         
  97.                         {delay(1);}
  98.                         while (!IRIN)        
  99.                                 delay(1);
  100.                         while (IRIN)         
  101.                         {
  102.                                 delay(1);
  103.                                 N++;           
  104.                                 if (N>=30)
  105.                                 {
  106.                                         EX0=1;
  107.                                         return;
  108.                                 }                 
  109.                         }                                 
  110.                         IRCOM[j]=IRCOM[j] >> 1;   
  111.                         if(N>=8)
  112.                         {
  113.                                 IRCOM[j] = IRCOM[j] | 0x80;                  
  114.                         }  
  115.                         N=0;
  116.                 }
  117.         }
  118.         
  119.         if(IRCOM[2]!=~IRCOM[3])
  120.         {
  121.                 EX0=1;
  122.                 return;
  123.         }
  124.         
  125.         IRCOM[5]=IRCOM[2] & 0x0F;     
  126.         IRCOM[6]=IRCOM[2] >> 4;      
  127.         
  128.         if(IRCOM[5]>9)
  129.         {
  130.                 IRCOM[5]=IRCOM[5]+0x37;
  131.         }
  132.         else
  133.         IRCOM[5]=IRCOM[5]+0x30;
  134.         
  135.         if(IRCOM[6]>9)
  136.         {
  137.                 IRCOM[6]=IRCOM[6]+0x37;
  138.         }
  139.         else
  140.         IRCOM[6]=IRCOM[6]+0x30;
  141.         q= (((IRCOM[6]&0x0f)<<4) + (IRCOM[5]&0x0f));
  142.    
  143.         switch(q)   
  144.         {
  145.                 case 0x16:m=0;break;
  146.                 case 0x03:m=1;break;
  147.                 case 0x18:m=2;LD();break;
  148.                 case 0x55:m=3;break;  
  149.                 case 0x08:m=4;break;  
  150.                 case 0x13:m=5;ji();break;
  151.                 case 0x51:m=6;break;  
  152.                 case 0x42:m=7;break;  
  153.                 case 0x52:m=8;dianzhen();break;
  154.                 case 0x41:m=9;break;  
  155.         
  156.                 default :break;
  157.         }
  158.          EX0 = 1;
  159. }
  160. void delay(unsigned char x)   
  161. {
  162.         unsigned char i;
  163.         while(x--)
  164.         {
  165.                 for (i = 0; i<13; i++) {}
  166.         }
  167. }
  168. void display()
  169. {
  170.    
  171.    P0=table[m];
  172.    P2_3 = 0;
  173.    delay(5);
  174.    P2_3 = 1;
  175.    
  176. }
  177. void delay1(int ms)
  178. {
  179.         unsigned char y;
  180.         while(ms--)
  181.         {
  182.                 for(y = 0; y<250; y++)
  183.                 {
  184.                         _nop_();
  185.                         _nop_();
  186.                         _nop_();
  187.                         _nop_();
  188.                 }
  189.         }
  190. }
  191. //************************************************************
  192. void delay1ms()
  193. {
  194. unsigned int i;
  195. for(i=8024;i>0;i--);  
  196. }
  197. void dianzhen(void)
  198. {   
  199.         int k, j, ms,y;
  200.         
  201.         uchar *p[] =
  202.                     { tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8,
  203.                      tab9, tab10, tab11, tab12, tab13, tab14, tab15, tab16,tab17,};                                                
  204.         
  205.    for(y=170;y>0;y--)
  206.          {
  207.                 for(ms = 3; ms > 0; ms--)        
  208.                 {
  209.                         for(k = 0; k < 17; k++)        
  210.                         {                                                         
  211.                                 HC595SendData(~tab0[2*k],~tab0[2*k + 1],(*(p[0] + 2*(k+j) + 1)),(*(p[0] + 2*(k+j) )));
  212.                         }
  213.                         
  214.                         HC595SendData(0xff,0xff,0,0);                                                                                       
  215.                  }
  216.                
  217.                
  218.                 j++;
  219.                 if(j == (15*15) )
  220.                 {
  221.                         j = 0;
  222.                 }
  223.         }        
  224.         }                                                                              
  225. void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)
  226. {  
  227.         uchar i;
  228.         
  229.         for(i=0;i<8;i++)
  230.         {
  231.                 MOSIO = BT3 >> 7 ;
  232.                 BT3 <<= 1;
  233.                 S_CLK = 0;
  234.                 S_CLK = 1;               
  235.         }
  236.         for(i=0;i<8;i++)
  237.         {
  238.                 MOSIO = BT2 >>7;        
  239.                 BT2 <<= 1;
  240.                 S_CLK = 0;
  241.                 S_CLK = 1;        
  242.         }
  243.         for(i=0;i<8;i++)
  244.         {
  245.                 MOSIO = BT1 >> 7;        
  246.                 BT1 <<= 1;
  247.                 S_CLK = 0;
  248.                 S_CLK = 1;        
  249.         }
  250.         for(i=0;i<8;i++)
  251.         {
  252.                 MOSIO = BT0 >> 7;        
  253.                 BT0 <<= 1;
  254.                 S_CLK = 0;
  255.                 S_CLK = 1;
  256.         }
  257.    
  258.         R_CLK = 0;
  259.         R_CLK = 1;
  260.         R_CLK = 0;
  261. }
  262. void lcdwrc(uint8 c)
  263. {
  264.         delay(1000);
  265.         rs=0;
  266.         rw=0;
  267.         e=0;
  268.         P0=c;
  269.         e=1;
  270.         delay(1000);
  271.         e=0;
  272. }
  273. void lcdwrd(uint8 dat)
  274. {
  275.         delay(1000);
  276.         rs=1;
  277.         rw=0;
  278.         e=0;
  279.         P0=dat;
  280.         e=1;
  281.         delay(1000);
  282.         e=0;
  283.         rs=0;
  284. }
  285. void lcdinit()
  286. {
  287.         delay(1500);
  288.         lcdwrc(0x38);
  289.         delay(500);
  290.         lcdwrc(0x38);
  291.         delay(500);
  292.         lcdwrc(0x38);
  293.         delay(500);
  294.         lcdwrc(0x38);
  295.         lcdwrc(0x08);
  296.         lcdwrc(0x01);
  297.         lcdwrc(0x06);
  298.         lcdwrc(0x0c);
  299.         key=0;
  300.         num=0;
  301.         flag=0;
  302.         fuhao=0;
  303.         a=0;
  304.         b=0;
  305.         c=0;
  306.         d=0;
  307.         biao=0;
  308.         led=0;
  309. }
  310. void keyscan()
  311. {
  312.         P1=0xfe;  
  313.         if(P1!=0xfe)
  314.         {

复制代码

未完

课程设计.zip

67.95 KB, 下载次数: 7, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-12-27 20:32 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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