注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
扫把鑫的个人空间 https://home.eeworld.com.cn/space-uid-299703.html [收藏] [复制] [分享] [RSS]
日志

简单秒表

已有 1166 次阅读2011-7-4 20:41 |个人分类:51学习|

   期末考试终于结束了,可以开始我2个月的专心51学习的生活了。今天在宿舍折腾了一下午,现在终于把它搞定了。虽然是一个很小的程序,但是当你自己从开始的实验结果与自己预期的结果不相同的,经过自己对程序的反复分析、调试之后,最后达到自己想要的结果的时候,那种如获至宝的感觉真的很好。从这反复的调试之中你可以收获很多东西的。我也是先看视频教程在自己写程序,下载到板子上调试,有可能在这反复调试的过程中,你会感觉到很厌烦、枯燥,但是你必须的坚持下去,当你坚持下去最终成功的时候,自己学到的东西那才是你自己的东西。
    我今天写的这个程序实现的功能就是六位数码管显示时间,个位数显示的数从0到9,1s累加一次,个位到10就向十位进1,十位再从0到9,到10向百位进1,依次类推。下面把程序附上,希望大家多多指教。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define uint32 unsigned long int
sbit A  = P2^0;
sbit B1 = P2^1;
sbit C  = P2^2;
void init();
void refresh();
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar a[6];
uint counter = 0;
void main()
{
 init();
 while(1);
}
void init()
{
 TMOD = 0x01;
 TH0   = (65536-1000)/256;
 TL0   = (65536-1000)%256;
 EA    = 1;
 ET0   = 1;
 TR0   = 1;
}
void timer0() interrupt 1
{
 static uint32 temp = 0;
 TH0   = (65536-1000)/256;
 TL0   = (65536-1000)%256;
 counter++;
 if(counter == 1000)
 {
  temp++;
  counter = 0;
 
  a[0] = temp%10;
  a[1] = temp/10%10;
  a[2] = temp/100%10;
  a[3] = temp/1000%10;
  a[4] = temp/10000%10;
  a[5] = temp/100000%10;
  
 }
 refresh();
}
void refresh()
{
 static uchar j = 0;
 switch(j)
 {
  case(0): A = 1;B1 = 0; C = 1;j++;P0 = table[a[0]];break;
  case(1): A = 0;B1 = 0; C = 1;j++;P0 = table[a[1]];break;
  case(2): A = 1;B1 = 1; C = 0;j++;P0 = table[a[2]];break;
  case(3): A = 0;B1 = 1; C = 0;j++;P0 = table[a[3]];break;
  case(4): A = 1;B1 = 0; C = 0;j++;P0 = table[a[4]];break;
  case(5): A = 0;B1 = 0; C = 0;j=0;P0 = table[a[5]];break;
  default:break;
 }
}
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章