找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stc15单片机按键循环显示源码

[复制链接]
跳转到指定楼层
楼主
ID:298970 发表于 2018-3-29 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. #include<stc15f2k60s2.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. uint i;
  5. uint ss_data=0;
  6. uint SS=0;
  7. uchar num=0;
  8. uchar code tab[]={0xc0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};//ROM
  9. void delayms(int ms);
  10. void keyscan16();
  11. void Timer0Init(void);
  12. void main()
  13. {
  14. Timer0Init();
  15. EA=1;
  16. P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;  //板子初始化程序 ,以后讲
  17. P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;  //数码管初始化程序,以后讲

  18.   P0=tab[0];
  19. while(1)
  20. {
  21.   keyscan16();
  22. }
  23. }
  24. void keyscan16()
  25. {
  26. uchar temp;

  27. P44=0;P42=1;P3=0X7F;
  28. temp=P3;
  29. temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
  30. if(temp!=0x0f)
  31. {
  32.   delayms(5);
  33.   temp=P3;
  34.   temp=temp&0X0F;
  35.   if(temp!=0x0f)
  36.   {
  37.    temp=P3;
  38.    ET0=1;
  39.    switch(temp)
  40.    {
  41.     case 0x7e: ss_data=800;break;
  42.     case 0x7d: ss_data=400;break;
  43.     case 0x7b: ss_data=200;break;
  44.     case 0x77: ss_data=100;break;
  45.    }
  46.    while(temp!=0x0f)
  47.    {
  48.     temp=P3;
  49.     temp=temp&0X0F;
  50.    }
  51.   }
  52. }
  53. P44=1;P42=0;P3=0XBF;//1011 111
  54. temp=P3;
  55. temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
  56. if(temp!=0x0f)
  57. {
  58.   delayms(5);
  59.   temp=P3;
  60.   temp=temp&0X0F;
  61.   if(temp!=0x0f)
  62.   {
  63.    temp=P3;
  64.    switch(temp)
  65.    {
  66.     case 0xBe: P0=tab[0];break;//1111 1110 P37----p30
  67.     case 0xBd: P0=tab[5];break;//1111 1101
  68.     case 0xBb: P0=tab[6];break;
  69.     case 0xB7: P0=tab[7];break;
  70.    }
  71.    while(temp!=0x0f)
  72.    {
  73.     temp=P3;
  74.     temp=temp&0X0F;
  75.    }
  76.   }
  77. }

  78. P3=0XDF;P44=1;P42=1;//1101 1111
  79. temp=P3;
  80. temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
  81. if(temp!=0x0f)
  82. {
  83.   delayms(5);
  84.   temp=P3;
  85.   temp=temp&0X0F;
  86.   if(temp!=0x0f)
  87.   {
  88.    temp=P3;
  89.    switch(temp)
  90.    {
  91.     case 0xDe: P0=tab[8];break;//1111 1110 P37----p30
  92.     case 0xDd: P0=tab[9];break;//1111 1101
  93.     case 0xDb: P0=tab[10];break;
  94.     case 0xD7: P0=tab[11];break;
  95.    }
  96.    while(temp!=0x0f)
  97.    {
  98.     temp=P3;
  99.     temp=temp&0X0F;
  100.    }
  101.   }
  102. }

  103. P3=0XEF;P44=1;P42=1;//1101 1111
  104. temp=P3;
  105. temp=temp&0X0F;//1111 1101 & 0000 1111 = 0000 1101
  106. if(temp!=0x0f)
  107. {
  108.   delayms(5);
  109.   temp=P3;
  110.   temp=temp&0X0F;
  111.   if(temp!=0x0f)
  112.   {
  113.    temp=P3;
  114.    switch(temp)
  115.    {
  116.     case 0xEe: P0=tab[0];break;//1111 1110 P37----p30
  117.     case 0xEd: P0=tab[2];break;//1111 1101
  118.     case 0xEb: P0=tab[4];break;
  119.     case 0xE7: P0=tab[6];break;
  120.    }
  121.    while(temp!=0x0f)
  122.    {
  123.     temp=P3;
  124.     temp=temp&0X0F;
  125.    }
  126.   }
  127. }
  128. }
  129. void Timer0Init(void)  //5毫秒@11.0592MHz
  130. {
  131. // AUXR |= 0x80;  //定时器时钟1T模式    AUXR =AUXR|0x80;   0010 1010  | 1000 0000 = 1010 1010
  132. // TMOD &= 0xF0;  //设置定时器模式   // TMOD = TMOD&0xF0;   1010 1010 & 1111 0000 = 1010 0000
  133. AUXR=0X80;
  134. TMOD=0XF0;//11.0592MHz  55296  5MS   65536-55296=10240                  
  135. TL0 = 0x00;  //设置定时初值   
  136. TH0 = 0x28;  //设置定时初值
  137. TF0 = 0;  //清除TF0标志
  138. TR0 = 1;  //定时器0开始计时
  139. }
  140. void time0(void) interrupt 1
  141. {
  142. SS=SS+1;
  143. if(SS==ss_data)
  144. {
  145.   SS=0;
  146.   P0=tab[num];
  147.   num++;
  148.   if(num==16)num=0;
  149. }
  150. }
  151. void delayms(int ms)
  152. {
  153. int i,j;
  154. for(i=ms;i>0;i--)
  155.   for(j=845;j>0;j--);
  156. }
复制代码



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:46065 发表于 2018-3-29 22:06 | 只看该作者
学习了,谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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