我的私人博客:www.satxt.com

今天完成的一个用单片机制作的时钟程序,刚学单片机,望高手指到代码的不足之处

本文源地址:http://www.iurlove.com  
1
/**************************************************************** 2 *工程名:带秒显示时钟单片机程序 * 3 *单片机:STC89C52 * 4 *电路板:http://www.51hei.com/150a.htm * 5 *目 的:学习单片机编程 * 6 *是 间:2012-11-25星期五 * 7 *作 者:张杉峰 * 8 *修 订:功能有待完善,下边我还加上调整时间的功能 * 9 *****************************************************************/ 10 #include<AT89X52.h> 11 #define uint unsigned int 12 #define uchar unsigned char 13 sbit wei=P2^7; //位锁存器使能端定义 14 sbit duan=P2^6; //段锁存器使能端定义 15 sbit led=P1^4; //这个是我买的实验板上的led使能端控制位 16 //定义需要的为变量... 17 uchar code duan_table[]={ 18 0x3f,0x06,0x5b,0x4f, 19 0x66,0x6d,0x7d,0x07, 20 0x7f,0x6f,0x77,0x7c, 21 0x39,0x5e,0x79,0x71,0x00 22 };//数码管从1——F显示编码表,记得最后一个分号哦... 23 uchar a,xiaoshi,fenzhong,miao,miao1,miao2,xiao1,xiao2,fen1,fen2; //定义要用到的变量,记得一个字符都不要写错哦... 24 25 void dispay(uchar miao1,uchar miao2,uchar fen1,uchar fen2,uchar xiao1,uchar xiao2); //显示函数什么,一定要记得什么哦... 26 void delay(uchar x); 27 void init()//初始化函数 28 { 29 TMOD=0X01; //定时计数器工作模式,工作于16位定时器计数器模式 30 TH0=(65536-50000)/256; //十六位寄存器高八位赋初值 31 TL0=(65536-50000)%256; //............低八位赋初值 32 EA=1; //开总中断 33 ET0=1; //开定时器计数器0中断 34 TR0=1; //启动定时器/计数器0 35 36 } 37 void main() 38 { 39 init(); //调用初始化函数 40 while(1) 41 { 42 if(a==20) //判断是否定时到1秒钟 43 { 44 a=0; //到一秒a清零 45 miao++; //让秒加1 46 if(miao==60) //判断秒是否到60 47 { 48 miao=0; //秒到60,让"miao"清零 49 fenzhong++; //让分钟自加1 50 if(fenzhong==60) //判断分钟是否到60 51 { 52 fenzhong=0; //分钟到60,让"fenzhong"清零 53 xiaoshi++; //让小时加1 54 if(xiaoshi==24) //判断小时是否到24 55 {xiaoshi=0;} //到24,让"xiaoshi"清零,从零点从新走动... 56 } 57 } 58 xiao1=xiaoshi/10; 59 xiao2=xiaoshi%10; //上面一行和这一行是把小时的两位分离出来,比如23,分解成2和3;下面几行一样就不解释了 60 fen1=fenzhong/10; 61 fen2=fenzhong%10; 62 miao1=miao/10; 63 miao2=miao%10; 64 } 65 dispay(miao1,miao2,fen1,fen2,xiao1,xiao2); 66 } 67 } 68 void dispay(uchar miao1,uchar miao2,uchar fen1,uchar fen2,uchar xiao1,uchar xiao2) 69 { 70 duan=1; 71 P0=duan_table[xiao1]; 72 duan=0; 73 P0=0xff; 74 wei=1; 75 P0=0xfb;//第三个LED亮,小时高位 76 wei=0; 77 delay(2); 78 79 duan=1; 80 P0=duan_table[xiao2]; 81 duan=0; 82 P0=0xff; 83 wei=1; 84 P0=0xf7; //第四个LED亮,小时低位 85 wei=0; 86 delay(2); 87 88 duan=1; 89 P0=duan_table[fen1]; 90 duan=0; 91 P0=0xff; 92 wei=1; 93 P0=0xef; //第五个LED亮,分钟高位 94 wei=0; 95 delay(2); 96 97 duan=1; 98 P0=duan_table[fen2]; 99 duan=0; 100 P0=0xff; 101 wei=1; 102 P0=0xdf; //第六个LED亮,分钟低位 103 wei=0; 104 delay(2); 105 106 duan=1; 107 P0=duan_table[miao1]; 108 duan=0; 109 P0=0xff; 110 wei=1; 111 P0=0xbf; //第七个LED亮,秒高位 112 wei=0; 113 delay(2); 114 115 duan=1; 116 P0=duan_table[miao2]; 117 duan=0; 118 P0=0xff; 119 wei=1; 120 P0=0x7f; 121 wei=0; 122 delay(2); 123 124 } 125 void delay(uchar x) 126 { 127 uchar bb,dd; 128 for(bb=x;bb>0;bb--) 129 for(dd=110;dd>0;dd--); 130 } 131 void timer0() interrupt 1 132 { 133 TH0=(65536-50000)/256; 134 TL0=(65536-50000)%256; 135 a++; 136 }
posted @ 2012-11-25 18:05  pyc  阅读(380)  评论(0编辑  收藏  举报
我的私人博客:www.satxt.com