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