期末考试终于结束了,可以开始我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;
}
}