关于51单片机的按键和显示的程序问题

关于51单片机的按键和显示的程序问题,第1张

#include <reg51.h>

#define uchar unsigned char

#define uinr unsigned int

#define DATA P2^0

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}

uchar idata temp[]={0xff,0xff,0xff}

sbit k1=P1^0

sbit k2=P1^1

sbit k3=P1^2

sbit k4=P1^3

sbit led1=P3^2

sbit led2=P3^3

sbit led3=P3^4

void delay(uint t)

{

uint a

while(t--)

{

for(a=0a<75a++)

{}

}

}

void timer()

{

TMOD=0X01

TH0=0XFC

TL0=0X18

TR0=1

ET0=1

EA=1

}

void display() interrupt 1

{

TH0=0XFC

TL0=0X18

led1=1led2=1led3=1

DATA=temp[0]

led1=0led2=1led3=1

DATA=temp[1]

led1=1led2=0led3=1

DATA=temp[2]&0x7f

led1=1led2=1led3=0

}

void main()

{

uchar number,ks

timer()

while(1)

{

temp[0]=table[number%10]

temp[0]=table[number%100/10]

temp[0]=table[number%1000/100]

if(k1==0)ks=0

if(k2==0)ks=1

switch(ks)

{

case 0:

{

if(k2==0)

{

while(k2==1){}

number++

if(number==3)number=2

}

if(k3==0)

{

while(k2==1){}

if(number==0)number=1

number--

}

}break

case 1:

{

if(k2==0)

{

while(k2==1){}

number++

if(number==19)number=18

}

if(k3==0)

{

while(k2==1){}

if(number==0)number=1

number--

}

}break

}

}

}

/*呼,花了我十五分钟,好久没打程序了,注是就不打了,应该看得懂把,不懂再问我拉,我q:745748376加点分贝,嘿嘿*/

下面是单片机键盘程序数码管显示36的简单代码示例(以STC89C52单片机为例,具体单片机型号的代码可能会有所不同):

```

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit LSA=P2^2

sbit LSB=P2^3

sbit LSC=P2^4

uchar code table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0x00}

// 数码管0~F的编码

uchar keyCode// 按键值

uchar num = 0// 显示的数字

void delay(uint x)

{

uint i,j

for(i=xi>0i--)

for(j=110j>0j--)

}

void DigDisplay()

{

uchar i

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

{

switch(i)

{

case(0):LSA=0LSB=0LSC=0break //选择第0位数码管

case(1):LSA=1LSB=0LSC=0break //选择第1位数码管

case(2):LSA=0LSB=1LSC=0break //选择第2位数码管

case(3):LSA=1LSB=1LSC=0break //选择第3位数码管

case(4):LSA=0LSB=0LSC=1break //选择第4位数码管

case(5):LSA=1LSB=0LSC=1break //选择第5位数码管

case(6):LSA=0LSB=1LSC=1break //选择第6位数码管

case(7):LSA=1LSB=1LSC=1break //选择第7位数码管

}

P0 = table[num]

delay(1) // 延迟一段时间

P0 = 0x00// 清空P0,关闭所有数码管,以便制造闪烁效果

}

}

void KeyDown()

{

if(keyCode==0x0D) // 判断是否按下键盘数字3

{

num = 3 // 显示数字3

}

}

void main()

{

while(1)

{

keyCode=P1 // 读取键盘按键值

if(keyCode!=0xff) // 如果不是按下任何键,则不响应

{

KeyDown() // 判断用户按下哪个键

DigDisplay() // 7段数码管显示

}

}

}

```

上面的代码实现了一个简单的程序,实现了单片机键盘按键输入数字3,然后在7段数码管上显示数字3。程序中使用了数码管的位选功能和键盘扫描功能,以及延迟和数码管编码表等知识。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存