注册 登录
编程论坛 单片机编程

单片机c51学习

lxl8781141 发布于 2010-11-24 19:34, 1001 次点击
我刚入手单片机,在研究c51的秒表设计,要有两个按键控制开始于暂停,两个按键分别在p1.0和p1.1两个端口,但是现在还没有头绪,请问高手教教我!谢啦
3 回复
#2
林浩2011-01-12 19:11
就是要用  单片机中断系统,  定时/计数中断,  可以去 看看,

我这里也有 个时钟程序,可以轻松改成秒表,不懂的再问我
#include "REG52.h"
unsigned char SHUMA[4];
unsigned int  shizhong=0;
unsigned char mabiao[10]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char k=0;

 
void delay()
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++);
}

void  sjcf(void)
{
    SHUMA[0]=  shizhong/1000;
    SHUMA[1]=  (shizhong- SHUMA[0]*1000)/100;
        SHUMA[2]=  (shizhong- SHUMA[0]*1000- SHUMA[1]*100)/10;
        SHUMA[3]=  shizhong % 10;

}

void display(void)
{
    sjcf();
    P0=mabiao[SHUMA[0]]; //  2
    P1=0xfe;
    delay();
    P0=mabiao[SHUMA[1]]; //  0
    P1=0xfd;
    delay();
    P0=mabiao[SHUMA[2]];  // 1
    P1=0xfb;
    delay();
    P0=mabiao[SHUMA[3]];   //0
    P1=0xf7;
    delay();
}

void cpu_initial(void)
{
    EA=1;
    TMOD = 0x01;
    ET0=1;
    EX0=1;
    EX1=1;
    TR0=1;
    TH0=0x3c;
    TL0=0xb0;
}

void int0_int(void) interrupt 0
{
     TR0=0;
}

void timer0_int(void) interrupt 1
{
    k ++;
    TH0=0x3c;
    TL0=0xb0;
    if (k == 20)
    {
        k=0;
        shizhong++;
    }
}

void int1_int(void) interrupt 2
{
      TR0=1;

}

void main(void)
{
    cpu_initial();
    while(1)
    {
        display();
    }
}

这个是秒钟,你稍微改下TH0,TL0初值,就可以成秒表了

#3
zb4755918162011-01-15 11:12
我们下学期也要学习单片机了 。
#4
大江2011-03-08 17:31
你的这是什么语言啊?
1