找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机练习小程序 数码管从左向右显示

[复制链接]
跳转到指定楼层
楼主
这是我单片机学习项目
可以当作学习单片机的小练习
半个小时完成的,附上代码
欢迎大家一起来交流学习

单片机源程序如下:
  1. #include <REGX52.H>
  2. #define N 50
  3. #define Fosc 11059200L
  4. #define INT_PERIOD 5
  5. #define OverFreq (1000/INT_PERIOD)
  6. #define ClockPeriod (0x10000-Fosc/12/OverFreq)
  7. unsigned char code DispSeg[] = {
  8.         0x00,
  9.         0x06,0x5b,0x4f,0x66,0x6d,
  10.         0x7d,0x27,0x7f,0x6f,0x3f,
  11.         0x08
  12. };
  13. void Delay(unsigned int xms)        
  14. {
  15.         unsigned char i, j;
  16.         while(xms--){
  17.                 i = 2;
  18.                 j = 199;
  19.                 do
  20.                 {
  21.                         while (--j);
  22.                 } while (--i);
  23.         }
  24. }

  25. unsigned char Buffer[]={0,0,0,0,0,1,7,2,11,3,5};
  26. unsigned char show[6];
  27. unsigned char j=0;
  28. unsigned char timecnt;
  29. sbit K1 = P2^0;
  30. void timer0_init(void)
  31. {
  32.         TMOD &= 0xF0;
  33.         TMOD |= 0x01;
  34.         TH0 = ClockPeriod >> 8;
  35.         TL0 = ClockPeriod & 0xFF;
  36.         ET0 = 1;
  37.         EA = 1;
  38.         TR0 = 1;
  39. }
  40. void change()
  41. {
  42.         unsigned char i;
  43.         for(i=0;i<6;i++)
  44.         {
  45.                 show[i]=Buffer[i+j];
  46.         }
  47. }
  48. void Display()
  49. {
  50.         unsigned char i=0x80;
  51.         unsigned char *ptr=show;
  52.         while(i!=0x02)
  53.         {
  54.                 P0=DispSeg[*ptr++];
  55.                 P1=i;
  56.                 Delay(1);
  57.                 i=i>>1;
  58.         }
  59. }
  60. void state1(void)
  61. {
  62.         unsigned char tim,i;
  63.         for(i=0;i<6;i++)
  64.         {
  65.                 tim=N;
  66.                 change();
  67.                 while(tim--)
  68.                 {
  69.                         Display();
  70.                 }
  71.                 j++;
  72.         }
  73. }
  74. void state3()
  75. {
  76.         unsigned char i;
  77.         P0=0x7f;
  78.         i = 0x80;
  79.         while(i!=0x02)
  80.         {
  81.                 P1=i;
  82.                 Delay(500);
  83.                 i=i>>1;
  84.         }
  85. }
  86. void state4()
  87. {
  88.         unsigned char temp,i;
  89.         temp = 0x01;
  90.         P1 = 0x00;
  91.         P1 = 0x02;
  92.         for(i=0;i<7;i++)
  93.         {
  94.             P0 = temp;
  95.                 if(temp == 0x80)
  96.                         temp = 0x01;
  97.                 else
  98.                         temp <<= 1;        
  99.                 Delay(500);
  100.         }
  101. }
  102. void keypre()
  103. {
  104.         if( K1 == 0 )         
  105.         {
  106.                 Display();
  107.                 if( K1 == 0 )
  108.                 {
  109.                         timer0_init();
  110.                         P0 = 0x00;
  111.                         Delay(1000);
  112.                         TR0 = 0;
  113.                         while( K1 == 0 );
  114.                         while(1)
  115.                         {
  116.                                 state3();
  117.                                 state4();
  118.                         }
  119.                 }
  120.         }
  121. }
  122. void main()
  123. {
  124.         state1();
  125.         while(1)
  126.         {
  127.                 j=5;
  128.                 change();
  129.                 Display();
  130.                 keypre();
  131.         }
  132. }
  133. void Time0Interrupt( void ) interrupt 1
  134. {
  135.         timecnt++;
  136.         TH0 = ClockPeriod >> 8;
  137.         TL0 = ClockPeriod & 0xFF;
  138.         P1 ^= 1;
  139. }
复制代码


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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