找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1889|回复: 1
收起左侧

单片机信号灯课程设计,含源码,原理图

[复制链接]
ID:333288 发表于 2018-5-18 21:48 | 显示全部楼层 |阅读模式

原理图

原理图

  1. #include "SST89x5x4.h"
  2. #include "Absacc.h"
  3. #define C8255_A     XBYTE[0xFF7C]        //8255
  4. #define C8255_B     XBYTE[0xFF7D]
  5. #define C8255_C     XBYTE[0xFF7E]
  6. #define C8255_CON   XBYTE[0xFF7F]
  7. sbit P22=P2^2;
  8. sbit P20=P2^0;
  9. sbit P17=P1^7;
  10. unsigned char a[] = {0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  11.                                          0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
  12. unsigned char key_down;
  13. void int0_isr() interrupt 0        //ía2¿ÖD¶ÏINT0
  14. {
  15.    while(P22==0);
  16.          {
  17.          P17=0;
  18.          P1=0;
  19.          C8255_B = 0x00;
  20.          }
  21. }
  22. void delay(unsigned int time )    //Ñóê±oˉêy
  23. {
  24.    unsigned int i;
  25.    for(i=0;i<time;i++);
  26.    }
  27. void int_timer0() interrupt 1    //¶¨ê±Æ÷0ÖD¶Ï
  28. {
  29.    P1=P1^0x33;
  30.    TH0=0x88;
  31.    TL0=0x00;
  32. }
  33. void keyscan()                                     //é¨ÃèêÇ·ñóD°′¼ü
  34. {
  35.         unsigned char cc;
  36.         C8255_A = 0x00;                                
  37.         cc = C8255_C;                                
  38.         key_down = (~cc) & 0x0f;
  39. }
  40. void xinhao_1()          //×ó×a
  41. {
  42.       while(key_down==0)
  43.     {               
  44.                         P1=0x80;
  45.        delay(20000);
  46.        P1=0x87;
  47.        delay(20000);
  48.                         keyscan();
  49.       }
  50.   }
  51. void xinhao_2()            //óò×a
  52. {
  53.   while(key_down==0)
  54.             {   P1=0x80;
  55.         delay(20000);
  56.           P1=0xB8;
  57.         delay(20000);
  58.                                 keyscan();
  59.       }
  60. }
  61. void xinhao_3()              //½ô¼±
  62. {
  63.             while(key_down==0)
  64.       {
  65.         P1=0x80;
  66.         delay(20000);
  67.         P1=0xBF;
  68.         delay(20000);
  69.                                 keyscan();
  70.       }
  71. }
  72. void xinhao_4()             //é23μ
  73. {
  74.          while(key_down==0)
  75.                         {
  76.         P1=0x80;
  77.         delay(20000);
  78.         P1=0xA1;
  79.         delay(20000);
  80.                                 keyscan();
  81.       }
  82. }
  83. void xinhao_5()            //×ó×aé23μ
  84. {
  85.        while(key_down==0)
  86.       {
  87.         P1=0xA0;
  88.         delay(20000);
  89.         P1=0xA7;
  90.         delay(20000);
  91.                                 keyscan();
  92.       }
  93. }
  94. void xinhao_6()             //óò×aé23μ
  95. {
  96.         while(key_down==0)
  97.       {
  98.         P1=0x81;
  99.         delay(20000);
  100.         P1=0xB9;
  101.         delay(20000);
  102.                                 keyscan();
  103.       }
  104.   }
  105. void xinhao_7()             //é23μ½ô¼±
  106.      {
  107.       while(key_down==0)
  108.       {
  109.         P1=0xA1;
  110.         delay(20000);
  111.         P1=0xBF;
  112.         delay(20000);
  113.                                 keyscan();
  114.       }
  115.      }
  116. void xinhao_8()             //×ó×aé23μ½ô¼±
  117.      {
  118.        while(key_down==0)
  119.       {
  120.         P1=0xA0;
  121.         delay(20000);
  122.         P1=0xBF;
  123.         delay(20000);
  124.                                 keyscan();
  125.       }
  126.      }
  127. void xinhao_9()            //óò×aé23μ½ô¼±
  128.    {
  129.        while(key_down==0)
  130.       {
  131.         P1=0x81;
  132.         delay(20000);
  133.         P1=0xBF;
  134.         delay(20000);
  135.                                 keyscan();
  136.       }
  137.          }
  138. void xinhao_10()               //í£¿¿
  139. {
  140.            while(key_down==0)
  141.                  {
  142.                          keyscan();
  143.      }
  144.                       ET0=0;
  145.       }
  146. void clear()                     //êyÂë1üÇåáã
  147. {
  148.         C8255_B = 0x00;
  149. }
  150. void getkey()                                                  //2éÑˉ¼üÅìËù°′ÏÂμÄλÖÃ
  151. {
  152.         unsigned char value;
  153.         unsigned int i;
  154.                 C8255_A = 0x0e ;            //μúò»áD
  155.                 value = C8255_C;
  156.          switch(value)
  157.         {
  158.                 case (0x0e):
  159.                 {
  160.                         C8255_B=a[0];             //DÅoÅ1-×ó×a
  161.                   xinhao_1();
  162.                         break;
  163.                 }
  164.          case(0x0d):
  165.          {
  166.                  C8255_B=a[4];             //DÅoÅ5-×ó×aé23μ
  167.                 xinhao_5();
  168.                  break;
  169.          }
  170.          case(0x0b):                 //DÅoÅ9-óò×aé23μ½ô¼±
  171.          {
  172.                  C8255_B=a[8];
  173.                 xinhao_9();
  174.                  break;
  175.          }
  176.          case(0x0f):                 //μúò»áDÎT°′¼ü°′ÏÂ
  177.          {
  178.            break;}
  179.          default:
  180. { P1=0;                       //μúò»áD±¨¾ˉDÅoÅ
  181.          for(i=0;i<10;i++)
  182.          {
  183.                  P20=1;
  184.                         delay(10);
  185.                         P20=~P20;
  186.             delay(10);
  187.    }
  188. }
  189. }
  190. C8255_A = 0x0d ;             //μú¶táD
  191.                 value = C8255_C;
  192.          switch(value)
  193.         {
  194.                 case (0x0e):             //DÅoÅ2-óò×a
  195.                 {
  196.                         C8255_B=a[1];
  197.                   xinhao_2();
  198.                         break;
  199.                 }
  200.          case(0x0d):               //DÅoÅ6-óò×aé23μ
  201.          {
  202.                  C8255_B=a[5];
  203.                 xinhao_6();
  204.                  break;
  205.          }
  206.          case(0x0b):               //DÅoÅ10-í£¿¿
  207.          {
  208.                  C8255_B=a[9];
  209.                   P1=0x80;                        
  210.             TH0=0x88;
  211.       TL0=0x00;
  212.                          ET0=1;
  213.       TR0=1;
  214.                  delay(30000);
  215.                 xinhao_10();
  216.                  break;
  217.          }
  218.          case(0x0f):               //μú¶táDÎT°′¼ü°′ÏÂ
  219.          {
  220.            break;}
  221.          default:
  222. { clear();                  //μú¶táD±¨¾ˉDÅoÅ
  223.          P1=0;
  224.          for(i=0;i<10;i++)
  225.          {
  226.                  P20=1;
  227.                         delay(10);
  228.                         P20=~P20;
  229.             delay(10);
  230.    }
  231. }
  232. }
  233. C8255_A = 0x0b ;            //μúèyáD
  234.                 value = C8255_C;
  235.          switch(value)
  236.         {
  237.                 case (0x0e):            //DÅoÅ3-½ô¼±
  238.                 {
  239.                         C8255_B=a[2];
  240.                   xinhao_3();
  241.                         break;
  242.                 }
  243.          case(0x0d):              //DÅoÅ7-é23μ½ô¼±
  244.          {
  245.                  C8255_B=a[6];
  246.                 xinhao_7();
  247.                  break;
  248.          }
  249.          case(0x0b):              //DÅoÅμÆ»ØÕy
  250.          {C8255_B=a[10];
  251.                  P1=0;
  252.            break;}
  253.          case(0x0f):             //μúèyáDÎT°′¼ü°′ÏÂ
  254.          {
  255.            break;}
  256.          default:
  257. { clear();                //μúèyáD±¨¾ˉDÅoÅ
  258.          P1=0;
  259.          for(i=0;i<10;i++)
  260.          {
  261.                  P20=1;
  262.                         delay(10);
  263.                         P20=~P20;
  264.             delay(10);
  265.    }
  266. }
  267. }
  268. C8255_A = 0x07 ;          //μúËÄáD
  269.                 value = C8255_C;
  270.          switch(value)
  271.         {
  272.                 case (0x0e):           //DÅoÅ4-é23μ
  273.                 {
  274.                         C8255_B=a[3];
  275.                   xinhao_4();
  276.                         break;
  277.                 }
  278.          case(0x0d):             //DÅoÅ8-×ó×aé23μ½ô¼±
  279.          {
  280.                  C8255_B=a[7];
  281.                  xinhao_8();
  282.                  break;
  283.          }
  284.          case(0x0f):             //μúËÄáDÎT°′¼ü°′ÏÂ
  285.          {
  286.            break;}
  287.          default:
  288. { clear();                //μúËÄáD±¨¾ˉDÅoÅ
  289.          P1=0;
  290.          for(i=0;i<10;i++)
  291.          {
  292.                  P20=1;
  293.                         delay(10);
  294.                         P20=~P20;
  295.             delay(10);
  296.    }
  297. }
  298. }
  299. }
  300. void main()
  301. {
  302.         P1=0x00;
  303.         clear();
  304.          EX0=1;
  305.    IT0=0;
  306.    EA=1;
  307.          TMOD=0x11;
  308.          C8255_CON = 0x81;                //82553õê¼»ˉ
  309.                 while(P22==1)
  310.                 {
  311.                         P17=P22;        
  312.              clear();                        
  313.                  keyscan();                                
  314.                   if(key_down)                        //·à¶¶¶ˉ
  315.                  {
  316.                         delay(300);
  317.                         clear();
  318.                         keyscan();
  319.                         if(key_down)
  320.                         {
  321.                                 key_down=0;
  322.                                 getkey();
  323.         }                        
  324.                  }
  325.          }
  326. }
复制代码

回复

使用道具 举报

ID:363661 发表于 2018-7-3 09:02 | 显示全部楼层
8255下面那个4行4列的那个东西怎么跳出来,是什么东西???谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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