原创 最近做个单片机数字钟发上来存着

2011-10-23 21:29 1745 14 15 分类: MCU/ 嵌入式

     快要毕业了,想到自己在学校里学的知识实在是少,然而单片机又一直困扰在心中,总觉得单片机学不会,大学就太遗憾。于是拿起书,拿起电烙铁,边学便制作电路,边写总结。我要记录我大学最后几个月的每一件事,记录每一点成果。让自己无怨无悔的走出校园。

  下边发我自己总结的一个文档,我不怕大家取笑我的愚昧,但是我觉得问心无愧就行了。现在知识起步,一点一点的学,扎扎实实的学,相信自己到毕业的时候也能用单片机做出点东西。

20111023212738929.jpg

下边是代码。可能不是最优的,欢迎大家指点。谢谢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;

                                    }

                                                  }

                       } 

 }

 

 

文章评论1条评论)

登录后参与讨论

飞言走笔 2011-10-24 08:19

不错不错~~
相关推荐阅读
用户1634674 2011-11-16 13:22
电子工程师技术评定考试(来自百度)
电子工程师技术评定考试 一、考试简介:   全国电子工程师技术水平考试是在信息产业部领导下,信息产业部电子行业职业技能鉴定指导中心组织实施的,面向从事电子及相关类专业的企业工程技术人员、企...
用户1634674 2011-11-15 20:15
正电压转负电压电路
正电压转负电压的几个电路(连续更新) 作者:Lixiongkuku 未经批准不得转载,否则追究责任后果自负      方法一:倍压整流法   原理,如上图采用倍压...
用户1634674 2011-11-15 19:25
基础知识大总结——逻辑电平(整理)
好几次面试被人问到关于逻辑电平的知识,你也来看看……你知道的不一定是对的噢!!    注:鉴于很多电子初学者对什么是TTL电平,什么是CMOS电平不清楚.也不能了解CMOS电平与TTL电平...
用户1634674 2011-11-09 11:34
0-99按键扫描计数器
0-99按键扫描计数器 目的:通过IO口扫描对按键的次数进行计数,范围为0到99.       电路图:段选P0^0 ~P0^6口控制a,b,c,d,e,f,g,h          ...
用户1634674 2011-10-18 18:12
D 类功放(数字功放)
D 类功放(数字功放) 概述D类功放:简单来说就是用一个交流信号(如人声)去和一个三角波信号进行电压比较,产生一个PWM信号,此PWm信号经过驱动电路整形后,经过三极管或者MOSE管进行驱动信号的...
我要评论
1
14
关闭 站长推荐上一条 /2 下一条