找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机代码求大神指教,急

  [复制链接]
跳转到指定楼层
楼主
ID:290732 发表于 2018-3-14 01:23 来自触屏版 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
板子是stc89c52
代码是我自己写的
可就是出不来,没用,求指教
  1. #include<reg51.h>

  2. typedef unsigned int u16;

  3. #define GPIO_DIG P0
  4. #define GPIO_KEY P1

  5. sbit LSA=P2^2;
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;
  8. sbit beep=P1^5;
  9. sbit led=P2^0;


  10. unsigned char code DIG_CODE[17]={
  11. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  12. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  13. unsigned char KeyValue;
  14. unsigned char KeyState;        
  15. unsigned char DisplayData[8];
  16. unsigned char password[8]={1,2,3,4,5,6,7,8};
  17. void Delay10ms();
  18. void KeyDown();
  19. void DigDisplay();
  20. void bijiao();
  21. void zhengque();
  22. void cuowu();



  23. ////////////////////////////////////////
  24. void main(void)
  25. {
  26.         int i;
  27.         KeyState=0;
  28.         for(i=0;i<8;i++)
  29.         {
  30.                 KeyDown();
  31.          if(KeyState==1)
  32.                 {
  33.                         DisplayData[7]=DisplayData[6];
  34.                         DisplayData[6]=DisplayData[5];
  35.                         DisplayData[5]=DisplayData[4];
  36.                         DisplayData[4]=DisplayData[3];
  37.                         DisplayData[3]=DisplayData[2];
  38.                         DisplayData[2]=DisplayData[1];
  39.                         DisplayData[1]=DisplayData[0];
  40.                         DisplayData[0]=DIG_CODE[KeyValue];
  41.                         KeyState=0;
  42.             }
  43.                 DigDisplay();
  44.         }        
  45.                         KeyDown();
  46.          if(KeyState==1)
  47.                 {
  48.                         if(KeyValue==16)
  49.       bijiao();        
  50.                 }
  51. }

  52. ////////////////////////////////////////

  53. //·ù÷
  54. void delay(u16 i)
  55. {
  56.         while(i--);        
  57. }

  58. void shengyin()
  59. {
  60. int num=0;
  61.         EA=1;
  62.         ET0=1;
  63.         TMOD=0x01;
  64.         TH0=(65536-50000)/256;
  65.         TL0=(65536-50000)%256;  
  66. TR0=1;
  67.         
  68.                
  69. beep=~beep;
  70. delay(50);
  71. if(num==10)
  72. beep=1;
  73. }


  74. void timer0() interrupt 1   //50ms
  75. {
  76.         int num;
  77.         TH0=(65536-50000)/256;   
  78.         TL0=(65536-50000)%256;
  79.         num++;
  80. }
  81. ////////////////////////////////////////

  82. //
  83. void bijiao()
  84. {
  85.                         int i,a=0;
  86.                         for(i=0;i<8;i++)
  87.         {
  88.                                 if(DisplayData[i]== password[i])
  89.                         {                a=a+1;   }
  90.                         else
  91.                         {        a=a;                }
  92.   }
  93.                         if(a==8)
  94.                         {                zhengque();        }
  95.                                 else
  96.                         {                cuowu(); }
  97. }        

  98. void zhengque()
  99. {
  100. DisplayData[0]=~0x3f; // "o"
  101. DisplayData[1]=~0x73; // "p"
  102. DisplayData[2]=~0x79; // "E"
  103. DisplayData[3]=~0x54; // "n"
  104.         DigDisplay();
  105. }
  106. void cuowu()
  107. {
  108. DisplayData[2]=~0x79; // "E"
  109. DisplayData[3]=~0x50; // "r"
  110. DisplayData[4]=~0x50; // "r"
  111.         DigDisplay();
  112.         shengyin();
  113. led=1;
  114. }
  115.                  
  116. //
  117. void DigDisplay()
  118. {
  119.         unsigned char i;
  120.         unsigned int j;
  121.         for(i=0;i<8;i++)
  122.         {
  123.                 switch(i)
  124.                 {
  125.                         case(0):
  126.                                 LSA=0;LSB=0;LSC=0; break;
  127.                         case(1):
  128.                                 LSA=1;LSB=0;LSC=0; break;
  129.                         case(2):
  130.                                 LSA=0;LSB=1;LSC=0; break;
  131.                         case(3):
  132.                                 LSA=1;LSB=1;LSC=0; break;
  133.                         case(4):
  134.                                 LSA=0;LSB=0;LSC=1; break;
  135.                         case(5):
  136.                                 LSA=1;LSB=0;LSC=1; break;
  137.                         case(6):
  138.                                 LSA=0;LSB=1;LSC=1; break;
  139.                         case(7):
  140.                                 LSA=1;LSB=1;LSC=1; break;        
  141.                 }
  142.                 GPIO_DIG=DisplayData[i];
  143.                 j=10;                                                
  144.                 while(j--);        
  145.                 GPIO_DIG=0x00;
  146.         }
  147. }


  148. //////////////////////////////////////

  149. //ì°ü
  150. void KeyDown(void)
  151. {
  152.         unsigned int a=0;
  153.         GPIO_KEY=0x0f;
  154.         if(GPIO_KEY!=0x0f)
  155.   {
  156.                 Delay10ms();
  157.                 a++;        
  158.                 a=0;
  159.                 if(GPIO_KEY!=0x0f)
  160.                 {
  161.                         KeyState=1;
  162.                         GPIO_KEY=0X0F;
  163.                          Delay10ms();
  164.                         switch(GPIO_KEY)
  165.                         {
  166.                                 case(0X07):        KeyValue=0;break;
  167.                                 case(0X0b):        KeyValue=1;break;
  168.                                 case(0X0d): KeyValue=2;break;
  169.                                 case(0X0e):        KeyValue=3;break;
  170.                         default:        KeyValue=17;
  171.                         }
  172.                         GPIO_KEY=0XF0;
  173.                         Delay10ms();
  174.                         switch(GPIO_KEY)
  175.                         {
  176.                                 case(0X70):        KeyValue=KeyValue;break;
  177.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  178.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  179.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  180.                                 default:        KeyValue=17;
  181.                         }
  182.                         while((a<500)&&(GPIO_KEY!=0xf0))
  183.                         {
  184.                                 Delay10ms();
  185.                                 a++;
  186.                         }
  187.                         a=0;
  188.                 }
  189.         }
  190. }


  191. ///////////////////////////////

  192. //±10ms
  193. void Delay10ms(void)   
  194. {
  195.     unsigned char a,b,c;
  196.     for(c=1;c>0;c--)
  197.         for(b=38;b>0;b--)
  198.             for(a=130;a>0;a--);
  199. }
复制代码

评分

参与人数 1黑币 +5 收起 理由
dsjfadsjf + 5 淡定

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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