把wei=_crol_(wei,1);改为wei=wei1 就可以了。。
古浪网站建设公司创新互联,古浪网站设计制作,有大型网站制作公司丰富经验。已为古浪千余家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的古浪做网站的公司定做!
我也有个程序 你可以参考下。。
#include reg51.h
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P2_4 = P2^4;
sbit P2_5 = P2^5;
sbit P2_6 = P2^6;
sbit P2_7 = P2^7;
/***********************************************************************************************/
const unsigned char led_code[20]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XD8,0X80,0X90,
0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X58,0X00,0X10};
//定义0~9以其带小数点的显示码
unsigned char led_reg[8]={1,9,10,11,12,13,14,15}; //定义显示数码缓存器
/************************************************************************************************
**function:delay(unsigned char i)
**功 能:延时程序
************************************************************************************************/
void delay(unsigned char i)
{ unsigned char j,k;
for(k=0;ki;k++)
{ for(j=0;j255;j++);
}
}
/************************************************************************************************
**function:led_show()
**功 能:显示函数
************************************************************************************************/
void led_show( )
{ static unsigned char led_shift=0x00; //定义静态变量
P2=0xFF; //关闭数码管控制端口
P0=led_code[led_reg[led_shift]]; //把字符代码送到P0端口
switch(led_shift) //选择数码管控制位
{ case 0: P2_0=0;break; //控制左1数码管
case 1: P2_1=0;break; //控制左2数码管
case 2: P2_2=0;break; //控制左3数码管
case 3: P2_3=0;break; //控制左4数码管
case 4: P2_4=0;break; //控制左5数码管
case 5: P2_5=0;break; //控制左6数码管
case 6: P2_6=0;break; //控制左7数码管
case 7: P2_7=0;break; //控制左8数码管
default:break;
}
led_shift++; //数码管控制变量自加
if(led_shift==0x08) //判断是否扫描一轮
led_shift=0x00; //归零进行下一轮扫描
}
/************************************************************************************************
mian()
************************************************************************************************/
void main()
{ P0=0X00; //P0端口输出低电平
P2=0XFF; //P2端口输出高电平
while(1)
{ led_show(); //调用显示函数
delay(10); //调用延时函数
}
}
void display(int n)
{
char b3, b2, b1; //定义两个有符号整形数b3,b2和b1
b3=n/100;
b2=(n/10)%10;//这里应该这样才对不然会大于10的
b1=n%10;
//百位
P0=seg7[b3]; //
en3=0; //显示DS2
ms_delay(10); //延时
en3=1; //关闭DS2
//十位
P0=seg7[b2]; //
en2=0; //显示DS2
ms_delay(10); //延时
en2=1; //关闭DS2
//个位
P0=seg7[b1]; //
en1=0; //显示DS1
ms_delay(10); //延时
en1=1; //关闭DS1
}
用10个8段数码管动态扫描显示的:
#include
unsigned
char
const
dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//
显示段码值0123456789
unsigned
char
code
seg[]={0,1,2,3,4,5,6,7,8,9};//分别对应相应的数码管点亮,即位码
/*------------------------------------------------
延时子程序
------------------------------------------------*/
void
delay(unsigned
int
cnt)
{
while(--cnt);
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned
char
i;
while(1)
{
P0=dofly[i];//取显示数据,段码
P2=seg[i];
//取位码
delay(20000);
//扫描间隙延时,时间太长会闪烁,太短会造成重影,自己调试
i++;
if(10==i)
//检测10位扫描完全?
i=0;
}
}
首先,你没有给出数码管的相应电路,这里就用Display()函数来代替你的显示程序。按键也没有给出电路,这里以普通IO按键来编写程序。
unsigned
char
disp_data;
//定义一个用于存储需要显示数值的全局变量
void
Display(unsigned
char
disp)
//数码管显示函数,输入参数为要显示的值。
void
Delay_ms(unsigned
char
disp)
//毫秒级延时函数,用于按键去抖动。
void
main()
{
disp_data=50;
Display(disp_data);
//初始显示"50"
while(1);
//循环查询+-按键的状态
{
if(K+
==
0)
//判断K+是否被按下(假如按键按下时为低电平)
{
Delay_ms(20);
//延时,去抖动
if(k+
==
0)
//再次判断
{
disp_data++;
//数值+1
if(disp_data80)
//判断数据是否超出范围
{
//已经超出
disp_data=80;
//使数据保持在80;
Display(disp_data);
//显示数据
}
else
//没有超出
{Display(disp_data);}
//显示数据
}
}
if(K-
==
0)
//判断K-是否被按下(假如按键按下时为低电平)
{
Delay_ms(20);
//延时,去抖动
if(k-
==
0)
//再次判断
{
disp_data--;
//数值-1
if(disp_data50)
//判断数据是否超出范围
{
//已经超出
disp_data=50;
//使数据保持在50;
Display(disp_data);
//显示数据
}
else
//没有超出
{Display(disp_data);}
//显示数据
}
}
}
}
浏览器里直接打的代码,整体思路应该是对的,需要注意的是K+\K-这样的变量keil中是非法的,实际程序中请自行改正。