搜索
热搜: 博途 单片机 CAD
查看: 73|回复: 0

[分享帖] “蓝桥杯”单片机大赛--基础框架程序

[复制链接]

64

主题

70

帖子

1103

积分

管理员

Rank: 9Rank: 9Rank: 9

GB

984

威望

16

热心值

2

精华

10

主题
64

违规

0

GKR 发表于 2019-7-5 09:49:33 |阅读模式
程序说明:本程序加一定的技巧可达省赛三等奖水平,感兴趣的可以研究一下
  1. #include<stc15f2k60s2.h>

  2. #define uchar unsigned char  //宏定义
  3. #define uint  unsigned int

  4. uchar code tab[]={0xc0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0Xbf,0XFF};//code表示储存在ROM中
  5. //    数组表示:    0    1    2    3    4    5    6    7    8    9    -   全灭
  6. uchar yi,er,san,si,wu,liu,qi,ba;
  7. bit S7=0,S6=0,S5=0,S4=0;
  8. uchar num=0;

  9. void delayms(int i);
  10. void display1(uchar yi,uchar er);
  11. void display2(uchar san,uchar si);
  12. void display3(uchar wu,uchar liu);
  13. void display4(uchar qi,uchar ba);
  14. void allinit(void);
  15. void keyscan();
  16. //void keyscan16();

  17. void main()
  18. {
  19.         allinit();
  20.         yi=0;er=8;san=10;si=5;wu=0;liu=10;qi=5;ba=5;//初始数码管显示08-50-55
  21.         while(1)
  22.         {
  23.                 keyscan();
  24.                 //keyscan16();
  25.                 display1(yi,er);
  26.                 display2(san,si);
  27.                 display3(wu,liu);
  28.                 display4(qi,ba);
  29.         }
  30. }

  31. //独立按键  跳线帽:BTN
  32. void keyscan()
  33. {
  34.         if(P30==0)
  35.         {
  36.                 delayms(5);//消抖
  37.                 if(P30==0)
  38.                 {
  39.                      S7=1;
  40.                 }
  41.                 while(!P30);
  42.         }
  43.         else if(P31==0)
  44.         {
  45.                 delayms(5);
  46.                 if(P31==0)
  47.                 {
  48.                      S6=1;
  49.                 }
  50.                 while(!P31);
  51.         }
  52.         else if(P32==0)
  53.         {
  54.                 delayms(5);
  55.                 if(P32==0)
  56.                 {
  57.                      S5=1;
  58.                 }
  59.                 while(!P32);
  60.         }
  61.         else if(P33==0)
  62.         {
  63.                 delayms(5);
  64.                 if(P33==0)
  65.                 {
  66.                      S4=1;
  67.                 }
  68.                 while(!P33);
  69.         }
  70. }


  71. /*矩阵按键:跳线帽:KBD
  72. void keyscan16()
  73. {
  74.         uchar temp;
  75.          
  76.         P44=0;P42=1;P3=0X7F;//0111 1111
  77.         temp=P3;
  78.         temp=temp&0X0F;
  79.         if(temp!=0x0f)
  80.         {
  81.                 delayms(5);//消抖
  82.                 temp=P3;
  83.                 temp=temp&0X0F;
  84.                 if(temp!=0x0f)
  85.                 {
  86.                         temp=P3;
  87.                         switch(temp)
  88.                         {
  89.                                 case 0x7e: num=0;break;
  90.                                 case 0x7d: num=1;break;
  91.                                 case 0x7b: num=2;break;
  92.                                 case 0x77: num=3;break;        
  93.                         }
  94.                         while(temp!=0x0f)
  95.                         {
  96.                                 temp=P3;
  97.                                 temp=temp&0X0F;
  98.                         }
  99.                 }
  100.         }

  101.         P44=1;P42=0;P3=0XBF;
  102.         temp=P3;
  103.         temp=temp&0X0F;
  104.         if(temp!=0x0f)
  105.         {
  106.                 delayms(5);
  107.                 temp=P3;
  108.                 temp=temp&0X0F;
  109.                 if(temp!=0x0f)
  110.                 {
  111.                         temp=P3;
  112.                         switch(temp)
  113.                         {
  114.                                 case 0xBe: num=4;break;
  115.                                 case 0xBd: num=5;break;
  116.                                 case 0xBb: num=6;break;
  117.                                 case 0xB7: num=7;break;        
  118.                         }
  119.                         while(temp!=0x0f)
  120.                         {
  121.                                 temp=P3;
  122.                                 temp=temp&0X0F;
  123.                         }
  124.                 }
  125.         }
  126.          
  127.         P3=0XDF;P44=1;P42=1;
  128.         temp=P3;
  129.         temp=temp&0X0F;
  130.         if(temp!=0x0f)
  131.         {
  132.                 delayms(5);
  133.                 temp=P3;
  134.                 temp=temp&0X0F;
  135.                 if(temp!=0x0f)
  136.                 {
  137.                         temp=P3;
  138.                         switch(temp)
  139.                         {
  140.                                 case 0xDe: num=8;break;
  141.                                 case 0xDd: num=9;break;
  142.                                 case 0xDb: num=10;break;
  143.                                 case 0xD7: num=11;break;        
  144.                         }
  145.                         while(temp!=0x0f)
  146.                         {
  147.                                 temp=P3;
  148.                                 temp=temp&0X0F;
  149.                         }
  150.                 }
  151.         }
  152.          
  153.         P3=0XEF;P44=1;P42=1;
  154.         temp=P3;
  155.         temp=temp&0X0F;
  156.         if(temp!=0x0f)
  157.         {
  158.                 delayms(5);
  159.                 temp=P3;
  160.                 temp=temp&0X0F;
  161.                 if(temp!=0x0f)
  162.                 {
  163.                         temp=P3;
  164.                         switch(temp)
  165.                         {
  166.                                 case 0xEe: num=12;break;
  167.                                 case 0xEd: num=13;break;
  168.                                 case 0xEb: num=14;break;
  169.                                 case 0xE7: num=15;break;        
  170.                         }
  171.                         while(temp!=0x0f)
  172.                         {
  173.                                 temp=P3;
  174.                                 temp=temp&0X0F;
  175.                         }
  176.                 }
  177.         }
  178. }
  179. */

  180. void allinit(void)
  181. {
  182.         P2=0XA0;//打开控制蜂鸣器继电器573
  183.         P0=0X00;//关闭蜂鸣器继电器
  184.          
  185.         P2=0XC0;//打开数码管位选
  186.         P0=0XFF;//选择所有数码管
  187.         P2=0XFF;//打开数码管段选
  188.         P0=0XFF;//关闭所有数码管
  189.          
  190.         P2=0X80;//打开控制LED573
  191.         P0=0XFF;//关闭所有LED灯
  192. }

  193. void display1(uchar yi,uchar er)
  194. {
  195.                 P2=0XC0;//打开数码管位选573  U8
  196.                 P0=0X01;//选择第一个数码管
  197.                 P2=0XFF;//打开数码管段选573  U7
  198.                 P0=tab[yi];//数码管显示码值
  199.                 delayms(1);
  200.                  
  201.                 P2=0XC0;//打开数码管位选573  U8
  202.                 P0=0X02;//选择第一个数码管
  203.                 P2=0XFF;//打开数码管段选573  U7
  204.                 P0=tab[er];//数码管显示码值
  205.                 delayms(1);
  206. }

  207. void display2(uchar san,uchar si)
  208. {
  209.                 P2=0XC0;
  210.                 P0=0X04;
  211.                 P2=0XFF;
  212.                 P0=tab[san];
  213.                 delayms(1);
  214.                  
  215.                 P2=0XC0;
  216.                 P0=0X08;
  217.                 P2=0XFF;
  218.                 P0=tab[si];
  219.                 delayms(1);
  220. }

  221. void display3(uchar wu,uchar liu)
  222. {
  223.                 P2=0XC0;
  224.                 P0=0X10;
  225.                 P2=0XFF;
  226.                 P0=tab[wu];
  227.                 delayms(1);
  228.                  
  229.                 P2=0XC0;
  230.                 P0=0X20;
  231.                 P2=0XFF;
  232.                 P0=tab[liu];
  233.                 delayms(1);
  234. }

  235. void display4(uchar qi,uchar ba)
  236. {
  237.                 P2=0XC0;
  238.                 P0=0X40;
  239.                 P2=0XFF;
  240.                 P0=tab[qi];
  241.                 delayms(1);
  242.                  
  243.                 P2=0XC0;
  244.                 P0=0X80;
  245.                 P2=0XFF;
  246.                 P0=tab[ba];
  247.                 delayms(1);

  248.                 P2=0XC0;
  249.                 P0=0XFF;
  250.                 P2=0XFF;
  251.                 P0=0XFF;
  252. }

  253. void delayms(int i)//注意最后一个for后有分号
  254. {
  255.         int j;
  256.         for(i;i>0;i--)
  257.                for(j=845;j>0;j--);
  258. }
复制代码



回复

使用道具 举报

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

本版积分规则

免责声明:
工控人论坛(gongkong.ren)所发布的一切破解补丁、注册机和注册信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@Zwying.Com

快速回复 返回列表 搜索

QQ|Archiver|手机版|小黑屋|工控人 ( 京ICP备17025554号-4 )|网站地图

GMT+8, 2019-9-18 15:05 , Processed in 0.049616 second(s), 6 queries , Redis On.

本站由 Discuz! X3.4 强力驱动

© 2019 GongKongRen Inc.

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