找回密码
 注册会员
搜索附件  
MCU资讯论坛 附件中心 单片机论坛 51单片机论坛 数码管移位扫描显示.rar

数码管移位扫描显示.rar

 

keil 中变态的c语言问题-急!:

此程序是一个键盘扫描,数码管移位显示的c语言程序,用的是89s52的单片机;思路大概就是:将键盘扫描到的数值在数码管上移位显示,就像平常的计算器那样输入,最新输入的数据始终显示在最右端,第一次键盘输入的数据显示在数码管最左端……然后依次。
#include<regx52.h>
#include<keyscan.h>//键盘扫描子程序
#define uint unsigned int
#define uchar unsigned char
uchar i=0;uchar j;
uchar code seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//段码,共阳型,0-9,a-f
uchar code scan[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选,分别选择从右到左的数码管
uchar counter[8];//记录8位数码管每位的值
void main()
{
uchar n=0;
while(1)
{
n=0;
n=keyscan();

/* for(j=6;j>=0;j--)
counter[j+1]=counter[j]; */ //用此for语句代替下面的几条移位语句不能显示,用以下的则能显示。此,问题1
if(n%17) //如果键盘有输入,则移位一次。键盘子程序返回1-16,可是这句好像没起什么作用,按键一次其内的语句就无限次的执行,以至8位数码管显示的都是一个数值
{//此,问题2
counter[7]=counter[6];
counter[6]=counter[5];
counter[5]=counter[4];
counter[4]=counter[3];
counter[3]=counter[2];
counter[2]=counter[1];
counter[1]=counter[0];
counter[0]=n-1;
}
P0=seg[counter];
P3=scan;

i++;
if(i==8) i=0;
}
}

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-25 07:05 , Processed in 0.037594 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.