先上代码:
/*****************************************************************************
* LED数码管显示演示程序 *
* 在8个LED数码管上依次显示1,2,3,4,5,6,7,8 *
P2口(片选位):(采用的P2.0-P2.2控制三线八线译码器74HC138)
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
位1 位2 位3 位4 位5 位6 位7 位8
P0口(数据位):
0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x7f 0x6f
0 1 2 3 4 5 6 7 8 9
0x77 0x7c 0x39 0x5e 0x79 0x71
A B C D E F
*******************************************************************************/
#include <reg51.h> //包含头文件
#include <intrins.h> //包含移位函数头文件
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code segment[]={0x3f ,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77 ,0x7c ,0x39 ,0x5e ,0x79 ,0x71 };//此数组为 0-f
uchar code select[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//位选代码
void delay(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
/****************************************************
函数:display()
功能:动态显示数码管0-F
参数:duan段选,wei位选,time延时时间设定
说明:无
时间2011.12.3
****************************************************/
void display(uint duan,wei,time)
{
P2=select[wei];
P0=segment[duan];
delay(time);
P0=0x00;
}
void display_num(ulong num)
{
uint i;
ulong curnum;
ulong tmpnum;
uint k=5;
i=8 ;
tmpnum=num;
do
{
curnum=tmpnum % 10;
tmpnum=tmpnum / 10;
display(curnum,i-1,k) ;
i-- ;
}
while(i>0 && tmpnum>0);
}
void main()
{
uint i, k,d,t=5;
ulong l;
while(1)
{
for (k=0;k<2;k++)
{
for (d=0;d<8;d++)
{
for (i=0;i<500;i++) //持续一定时间
{
display(7*k+d,d,t) ;
}
}
}
delay(1000) ;
l=12345678;
for (i=0;i<500;i++)
{
display_num(l) ;
}
delay(1000) ;
l=23456789;
for (i=0;i<500;i++)
{
display_num(l) ;
}
delay(1000) ;
}
}
下载程序有点周折,STC比较挑剔,原有的USB转串口线不能用,开始以为串口部分有问题,经反复检查没发现问题,后拿到台式机上试,可以下载,从新买了一条HL-340芯片的,可以下载了。下载时要先点程序中的下载按钮,再上电,否则不易成功。
按键扫描实验代码:
/*****************************************************************************
程序名称:矩阵键盘扫描显示键值
简要说明:P3口接矩阵键盘:低四位行,高四位列
LED数码管 *
P2口(片选位):(采用的P2.0-P2.2控制三线八线译码器74HC138)
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
位1 位2 位3 位4 位5 位6 位7 位8
P0口(数据位):
0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x7f 0x6f
0 1 2 3 4 5 6 7 8 9
0x77 0x7c 0x39 0x5e 0x79 0x71
A B C D E F
*******************************************************************************/
#include <reg51.h> //包含头文件
#include <intrins.h> //包含移位函数头文件
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code segment[]={0x3f ,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77 ,0x7c ,0x39 ,0x5e ,0x79 ,0x71 };//此数组为 0-f
uchar code select[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//位选代码
uchar key_val=0; //定义键值,初始默认为0
void delay(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
/****************************************************
函数:display()
功能:动态显示数码管0-F
参数:duan段选,wei位选,time延时时间设定
说明:无
时间2011.12.3
****************************************************/
void display(uint duan,wei,time)
{
P2=select[wei];
P0=segment[duan];
delay(time);
P0=0x00;
}
void display_num(ulong num)
{
uint i;
ulong curnum;
ulong tmpnum;
uint k=5;
i=8 ;
tmpnum=num;
do
{
curnum=tmpnum % 10;
tmpnum=tmpnum / 10;
display(curnum,i-1,k) ;
i-- ;
}
while(i>0 && tmpnum>0);
}
/*****按键扫描*****/
void Check_Key(void)
{
unsigned char row,col,tmp1,tmp2;
tmp1 = 0x01; //tmp1用来设置P3口的输出,取反后使P3.0~P3.3中有一个为0
for(row=0;row<4;row++) // 行检测
{
P3 = 0x0f; // 先将P3.0~P3.3置高
P3 =~tmp1; // 使P3.0~P3.3中有一个为0
tmp1*=2; // tmp1左移一位
if ((P3 & 0x0f) < 0x0f) // 检测P1.0~P1.3中是否有一位为0,只要有,则说明此行有键按下,进入列检测
{
tmp2 = 0x10; // tmp2用于检测出哪一列为0
for(col =0;col<4;col++) // 列检测
{
if((P3 & tmp2)==0x00) // 该列如果为低电平则可以判定为该列
{
key_val = row*4 +col; // 获取键值,识别按键
return; // 退出循环
}
tmp2*=2; // tmp2左移一位
}
}
}
}
void main()
{
// uint i;
// ulong l;
while(1)
{
Check_Key();
// l=key_val;
// for (i=0;i<5;i++)
// {
display_num(key_val) ;
// }
// delay(1000) ;
}
}
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |