51单片机数码管闪烁c语言,51单片机--设置数码管的闪烁位置,便于输入数字...

/*

有四个独立按键为 K1~K4,有四个数码管,可显示 0000~9999。

初始时都显示 0。

四个数码管中,有一个处于闪烁状态。闪烁的频率为 1Hz。

利用 K3、K4 可以使得闪烁的位置左右移动。

只有不停闪烁的位,才可以用 K1、K2 使其数值递增或递减。

数值的范围是 0~9。

题目连接:http://zhidao.baidu.com/question/455550887523150405.html

做而论道编写程序如下:

*/

#include

#include

sbit k_a = P3^1;

sbit k_s = P3^3;

sbit k_l = P3^5;

sbit k_r = P3^7;

//---------------------------------------

unsigned char code SEG7[] = {

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

unsigned char DISP_BUFF[] = {0, 0, 0, 0, 0, 0, 0, 0};

unsigned char num[] = {0, 0, 0, 0, 0, 0, 0, 0};

unsigned char n = 0, n_50ms;

bit flag;

//---------------------------------------

void DelayMS(unsigned int x)

{

unsigned char i;

while(x--) for(i = 200; i > 0; i--);

}

//---------------------------------------

void display()

{

unsigned char i, w = 128;

for(i = 0; i < 8; i++) DISP_BUFF[i] = num[i];

if (flag) DISP_BUFF[n] = 10;

for(i = 0; i < 8; i++) {

P0 = SEG7[DISP_BUFF[i]];

P2 = w; DelayMS(1); P2 = 0;

w = _cror_(w, 1);

}

}

//---------------------------------------

void main()

{

TMOD = 0x01;

TH0 = 0x3C;

TL0 = 0xB0;

TR0 = 1;

IE = 0x82;

while(1) {

if (!k_a) {

display();

if (!k_a) {

while (!k_a) display();

num[n]++; if (num[n] > 9) num[n] = 0;

}

}

if (!k_s) {

display();

if (!k_s) {

while (!k_s) display();

num[n]--; if (num[n] > 9) num[n] = 9;

}

}

if (!k_l) {

display();

if (!k_l) {

while (!k_l) display();

n++; if (n > 3) n = 0;

}

}

if (!k_r) {

display();

if (!k_r) {

while (!k_r) display();

n--; if (n > 3) n = 3;

}

}

display();

}

}

//---------------------------------------

void T0_INT() interrupt 1

{

TH0 = 0x3C;

TL0 = 0xB0;

n_50ms++;

n_50ms %= 6; //10对应1Hz

if(!n_50ms) flag = ~flag;

}

//---------------------------------------

//仿真运行的截图如下:

02kuhT3fB7wzg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值