21ic电子技术开发论坛

标题: 找到了一个14年前的硬盘发现了我学51时候的代码 [打印本页]

作者: gaoyang9992006    时间: 2025-1-18 10:42
标题: 找到了一个14年前的硬盘发现了我学51时候的代码
复制
  1. #include"reg51.h"



  2. void delay(void)
  3. {
  4. unsigned int i,j;
  5. for(i=0;i<400;i++)
  6.    for(j=0;j<400;j++)
  7.    ;
  8. }

  9. void main(void)
  10. {  unsigned int i;
  11. unsigned char codep2[]={139,251,141,169,249,169,137,187,137,169};       
  12.     unsigned char codep0[]={246,254,254,254,246,247,247,254,246,246};
  13. while(1)
  14.   {
  15.   for(i=0;i<10;i++)
  16.    {P2=codep2[i];P0=codep0[i];delay(); P0=0xff;P2=0xff;}
  17.   }                

  18. }
能看出来我这是干啥用的代码不?

作者: gaoyang9992006    时间: 2025-1-18 10:43
复制
  1. #include<reg51.h>  
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit s1=P1^0;
  5. sbit s2=P1^1;
  6. sbit s3=P1^2;
  7. sbit p=P0^7;
  8. uchar code value[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定义0~9编码的数组,后面只需要调用数组
  9. uchar code choice[4]={0x01,0x02,0x04,0x08};
  10. uchar time;            //定义中断次数标识符
  11. uchar second;  //定义秒的标识符
  12. uchar minute; //定义分的标识符
  13. uchar hour;         //定义小时


  14. void delay(void)                   
  15.    {
  16.       uchar t;
  17.       for(t=0;t<100;t++)
  18.           ;
  19.    }
  20. void delay60ms(void)
  21.   {
  22.     unsigned char i,j;
  23.          for(i=0;i<200;i++)
  24.          for(j=0;j<100;j++)
  25.            ;
  26.   }
  27. void displaysecond(uchar s)
  28.    {
  29.    P2=choice[0];p=0;delay();P2=choice[1];p=0;delay(); P2=choice[2];p=0;delay();P2=choice[3];p=0;delay();
  30.    }
  31. void displayminute(uchar m)
  32. {
  33. P2=choice[0];P0=value[m%10];delay();P2=choice[1];P0=value[m/10];delay();       
  34. }
  35. void displayhour(uchar h)
  36. {
  37. P2=choice[2];P0=value[h%10];delay();P2=choice[3];P0=value[h/10];delay();
  38. }

  39. void key(void)
  40. {          
  41.           if(s1==0)      
  42.            {
  43.                      delay60ms(); delay60ms();   
  44.                          if(s1==0) { hour++; }
  45.            }
  46.            if(s2==0)      
  47.            {
  48.                      delay60ms(); delay60ms();   
  49.                          if(s2==0) { minute++; }
  50.            }
  51.                   if(s3==0)      
  52.            {
  53.                      delay60ms(); delay60ms();   
  54.                          if(s3==0)
  55.                           {hour=0;minute=0;second=0;}
  56.            }
  57. }  
  58. void main(void)
  59. {
  60. TMOD=0x01;
  61. EA=1;
  62. ET0=1;
  63. TH0=0x4B;
  64. TL0=0xFF;
  65. TR0=1;
  66. time=0;second=0;hour=0;
  67. while(1)
  68.   {
  69.   displaysecond(second);
  70.   displayminute(minute);
  71.   displayhour(hour);
  72.   div();
  73.   key();
  74.   
  75.   }

  76. }


  77.    void interserve(void)interrupt 1 using 1                 //响应中断程序声明对应的模式
  78.    {
  79.            TH0=(65536-46083)/256;TL0=(65536-46083)%256;
  80.            time++;
  81.        if(time==20)
  82.            {
  83.            time=0;second++;
  84.            }  
  85.              
  86.      
  87.            if(second==60)
  88.            {
  89.            second=0;minute++;
  90.            }
  91.            if(minute==60)
  92.            {
  93.            minute=0;hour++;
  94.            }
  95.        if(hour==24)
  96.            hour=0;
  97.           


  98.    }
  99.           

作者: gaoyang9992006    时间: 2025-1-18 10:43
复制
  1. unsigned char year,month,K1,K2,K3,M0;
  2. void key1();
  3. void key2();
  4. void delay();
  5. unsigned char key();
  6. unsigned char find();
  7. void delay()                          //延时函数
  8. {
  9.   unsigned char i,j;
  10.   for(i=0;i<2;i++)
  11.   for(j=0;j<165;j++)
  12.   ;
  13. }

  14. unsigned char find()          //按键功能选择
  15. {
  16.   if(K1==0)
  17.   {
  18.   delay();
  19.   if(K1==0)
  20.   M0++;delay();
  21.   if(M0>3)
  22.   M0=0;
  23.   }
  24. return M0;
  25. }
  26. unsigned char key(unsigned char M0)                                 //根据功能选项判断执行哪种指令
  27. {

  28. if(M0==1)
  29. key1();
  30. if(M0==2)
  31. key2();
  32. return 0;
  33. }
  34. main()
  35. {
  36.    
  37.     key(find());
  38.    
  39. }

  40. /************功能1********************************/
  41. void key1()
  42. {
  43. if(K2==0)
  44. {delay();
  45. if(K2==0)
  46. month++;
  47. }
  48. }
  49. /****************功能2***************************/
  50. void key2()
  51. {
  52. if(K3==0)
  53. {delay();
  54. if(K3==0)
  55. year++;
  56. }
  57. }

作者: gaoyang9992006    时间: 2025-1-18 10:45
[attach]2355652[/attach]
当年还学数码管怎么显示数字。

作者: gaoyang9992006    时间: 2025-1-18 10:45
[attach]2355654[/attach]

作者: mintspring    时间: 2025-1-18 14:39
不知道现在的大学是不是也是以51为教学内容
作者: yiy    时间: 2025-1-21 14:40
万年历的程序应该是很多人都玩过的。
作者: mintspring    时间: 2025-1-25 16:02
万年历的程序吗?不错啊,入门都是学这个。
作者: 幸福小强    时间: 2025-1-25 16:57
很不错的用法,学到了。




欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/) Powered by Discuz! X3.5