您好,欢迎来到刀刀网。
搜索
您的当前位置:首页按键显示数码管

按键显示数码管

来源:刀刀网
初学者 :按键显示数码管编程

#include #define DATA P0

sbit seg_sel=P1^4; //段码锁存 sbit bit_sel=P1^5; //位码锁存 typedef unsigned char u8; typedef unsigned int u16;

u8 code seg_table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

//段码查表

u8 code bit_table[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //位码查表 /*-----------------------------------------------------------------------------------------------------------*/

void delayms(u16 x) //延时函数 {

u8 i; while(x--)for(i=0;i<120;i++); }

/*--------------------------------------------------------------------------------------------------------------*/ void display_led(u8 witch_bit,u8 witch_seg) //显示函数 { DATA=bit_table[witch_bit]; //位码显示 bit_sel=1; //位码锁存 bit_sel=0; DATA=seg_table[witch_seg]; //段码显示 seg_sel=1; //段码锁存 seg_sel=0; delayms(5); }

/*----------------------------------------------------------------------------------------------------------------*/ u8 key_scan() //按键判断 及 编码 {

u8 temp,temp2;

P2=0xf0; //P2输出高4位 1111 0000 temp=P2; // 读入P2值

if(temp!=0xf0) //判断 按键是否 按下 { delayms(5); //延时去抖 temp=P2; //再次读入P2的值 if(temp!=0xf0) //再次判断 按键是否按下 { temp2=temp&0xf0; //取出按键的 高4位,所以用 &1111 0000 P2=0x0f; //P2输出低4位 0000 1111 delayms(5); temp=P2; //读入P2值 temp2|=temp; //temp2的高4位和temp的低4位 相与 在赋值给temp2, } } return temp2;

}

/*-------------------------------------------------------------------------------------------------------------*/ u8 encode(u8 cod) //按键解码函数 { u8 num; switch(cod) { case 0xee: num=0;break; case 0xde: num=1;break; case 0xbe: num=2;break; case 0x7e: num=3;break; case 0xed: num=4;break; case 0xdd: num=5;break; case 0xbd: num=6;break; case 0x7d: num=7;break; case 0xeb: num=8;break; case 0xdb: num=9;break; case 0xbb: num=10;break; case 0x7b: num=11;break; case 0xe7: num=12;break; case 0xd7: num=13;break; case 0xb7: num=14;break; case 0x77: num=15;break; default: break; } return num; }

/*------------------------------------------------------------------------------------------------*/ void main(void) //主函数 {

u8 cod,num; P0=0xff; P1=0xff; //初始化 seg_sel=0; bit_sel=0; while(1) { cod=key_scan(); //按键判断 及 编码 num=encode(cod); //按键解码 及 得出 数据 display_led(3,num); //显示按键数据 } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务