大家帮忙啊:C语言编写七段数码管显示0到16数字的程序

大家帮忙啊:C语言编写七段数码管显示0到16数字的程序,第1张

外中断0接一按键,模拟检测上层乘客。

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit P2_0=P2^0

sbit P2_1=P2^1

uchar a=16,time

bit flag0,flag1

uchar code tab[ ]={

   0x3F,/*0*/

         0x06,/*1*/

         0x5B,/*2*/

         0x4F,/*3*/

         0x66,/*4*/

         0x6D,/*5*/

         0x7D,/*6*/

         0x07,/*7*/

         0x7F,/*8*/

         0x6F,/*9*/

    }

   

void delay_ms(uint ms)

{

uchar i

while(ms--)

for(i=0i<123i++)

}       

void INTinit()

{

TMOD=0x01

EA=1

EX0=1

IT0=1

ET0=1

TR0=1

TH0=0x3c

TL0=0xb0

}

void disp()

{

P0=tab[a/10]

P2_0=0

delay_ms(3)

P2_0=1

P0=tab[a%10]

P2_1=0

delay_ms(3)

P2_1=1

}

void main()

{

INTinit()

while(1)

{

if(a>4)

flag0=1

else

flag0=0

if(!flag0)

disp()

else

{

 if(flag1)

 disp()

}

}

}

void EX0INT() interrupt 0

{

a--

if(a==0)

EA=0

}

void T0INT() interrupt 1

{

TH0=0x3c

TL0=0xb0

time++

if(time==5)

{

time=0

flag1=!flag1

}

}

这个就两个功能,一个是键盘扫描,二是数码管显示,这样的程序网上一大把,

按键程序

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

uchar pre_peyno=16keyno=16

void delayms(int x)

{

uchar i

while(x--)

{

for(i=0i<120i++)

}

}

void ked_scan()

{

uchar m

P2=0x0f

if(P2&0x0f!=0x0f)

delayms(2)

if(P2&0x0f!=0x0f)

m=P2^0x0f

switch(m)

{

case1:keyno=0break

case2:keyno=1break

case4:keyno=2break

case8:keyno=3break

default:keyno=16

}

P2=0xf0

delayms(1)

m=P2>>4^0x0f

m=m+10

switch(m)

{

case1:keyno=0break

case2:keyno=4break

case4:keyno=8break

case8:keyno=12break

}

}

main()

{

P2=0xff

while(1)

{

uchar i

switch(keyno)

{

case0:P2=0x00break

case1:P2=0xfefor(i=0i<7i++){P2=_crol_(P2,1)delayms(150)}break

case2:P2=0x7ffor(i=0i<7i++)P2=_cror_(p2,1)delayms(150)}break

case16:P2=0xffbreak

}

}

数码管程序

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit dula=P2^7

sbit wela=P2^6

unsigned char code num[]=

{0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71}

#define uint unsigned int

void delay(uint x)

{

while(x--)

}

void main()

{

while(1)

{

P0=0xfe

wela=1

wela=0

P0=num[1]

dula=1

dula=0

delay(1000)

P0=0xfd

wela=1

wela=0

P0=num[2]

dula=1

dula=0

delay(1000)

}

}

以上两个程序是参考程序,不过还得根据自己的实际电路改改,不能直接运用。

调整显示常数表:

共阴极显示:3F 06 5B 4F 66 6D 7D 07 7F 6F 77 7C 39 5E 79 71

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

共阳极显示:C0 F9 A4 B0 99 92 82 F8 80 90 88 83 C6 A1 86 8E

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11507087.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存