c语言控制双数码管,单片机C语言编程实现双数码管可调秒表

单片机C语言编程实现双数码管可调秒表

解:只要满足题目要求,方法越简单越好。由于单片机I/O资源足够,所以双数码管可接成静态显示方式,两个共阴数码管分别接在P1(秒十位)和P2(秒个位)口,它们的共阴极都接地,安排两个按键接在P3.2(十位数调整)和P3.3(个位数调整)上,为了方便计时,选用12MHz的晶体。为了达到精确计时,选用定时器方式2,每计数250重载一次,即250us,定义一整数变量计数重载次数,这样计数4000次即为一秒。定义两个字节变量S10和S1分别计算秒十位和秒个位。编得如下程序:

#include

Code unsigned char Seg7Code[16]= //用十六进数作为数组下标,可直接取得对应的七段编码字节

// 0     1    2     3     4    5     6     7     8     9    A     b     C     d    E    F

{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

void main( void )

{

unsigned int us250 = 0;

unsigned char s10 = 0;

unsigned char s1 = 0;

unsigned char key10 = 0;    //记忆按键状态,为1按下

unsigned char key1 = 0;     //记忆按键状态,为1按下

//初始化定时器 Timer0

TMOD = (TMOD & 0xF0) | 0x02;

TH1 = -250;   //对于8位二进数来说,-250=6,也就是加250次1时为256,即为0

TR1 = 1;

while(1){                                               //----------循环1

P1 = Seg7Code[ s10 ];  //显示秒十位

P2 = Seg7Code[ s1 ];   //显示秒个位

while( 1 ){                                        //----------循环2

//计时处理

if( TF0 == 1 ){

TF0 = 0;

if( ++us250 >= 4000 ){

us250 = 0;

if( ++s1 >= 10 ){

s1 = 0;

if( ++s10 >= 6 ) s10 = 0;

}

break;   //结束“循环2”,修改显示

}

}

//按十位键处理

P3.2 = 1;     //P3.2作为输入,先要输出高电平

if( key10 == 1 ){  //等松键

if( P3.2 == 1 )    key10=0;

}

else{              //未按键

if( P3.2 == 0 ){

key10 = 1;

if( ++s10 >= 6 ) s10 = 0;

break; //结束“循环2”,修改显示

}

}

//按个位键处理

P3.3 = 1;     //P3.3作为输入,先要输出高电平

if( key1 == 1 )    //等松键

{    if( P3.3 == 1 )    key1=0;  }

else {             //未按键

if( P3.3 == 0 ){   key1 = 1;

if( ++s1 >= 10 ) s1 = 0;

break; //结束“循环2”,修改显示

}

}

} //循环2’end

}//循环1’end

}//main’end

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值