快要毕业了,想到自己在学校里学的知识实在是少,然而单片机又一直困扰在心中,总觉得单片机学不会,大学就太遗憾。于是拿起书,拿起电烙铁,边学便制作电路,边写总结。我要记录我大学最后几个月的每一件事,记录每一点成果。让自己无怨无悔的走出校园。
下边发我自己总结的一个文档,我不怕大家取笑我的愚昧,但是我觉得问心无愧就行了。现在知识起步,一点一点的学,扎扎实实的学,相信自己到毕业的时候也能用单片机做出点东西。
下边是代码。可能不是最优的,欢迎大家指点。谢谢lixiongkuku@sina.com
程序:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90} ; //段选
uchar code dis[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //位选
unsigned char i,miao,fen,shi;
unsigned char num0;
sbit D1=P2^0; //定义秒闪烁位
/***************延时函数*************/
void delay(uint z){
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/***************显示函数*************/
void Display(unsigned char Bit,unsigned char Dat) //第几位显示,显示几
{
P0=table[Dat];//显示数据
P1=dis[Bit]; // 显示位数
}
/***************主函数*************/
void main()
{
TMOD=0x01;//0000 0001 选择定时器T0方式一
TH0=0x3c; //定时50ms,初值65536-50000=0x3cbo
TL0=0xb0;
EA=1;//开总中断
ET0=1;//打开T0中断
i=0;//定时器初始化
miao=0;
fen=0;
shi=0;
TR0=1;//启动定时器1
while(1){
Display(0,miao%10); //调用显示函数
delay(3);
Display(1,miao/10);
delay(3);
Display(2,fen%10); //调用显示函数
delay(3);
Display(3,fen/10);
delay(3);
Display(4,shi%10); //调用显示函数
delay(3);
Display(5,shi/10);
delay(3);
}
}
void time0_int(void) interrupt 1 //中断0定时器1溢出的中断服务程序
{
TH0=0x3c;
TL0=0xb0;
i++;
if(i==10){D1=1;}
if(i==20){
D1=0;
i=0;
miao++;
if(miao==60){ //60*20*500ms=60s
miao=0; //秒清零
fen++; //分加一
if(fen==60){
fen=0;//分清零
shi++; //时加一
if(shi==24)
shi=0;
}
}
}
}
飞言走笔 2011-10-24 08:19