//按键控制字符串在数码管上移动显示
//1、P30控制移动方向
//2、P31加速度
//3、P32减速度
//4、每移动完整一次蜂鸣器响一下;
//
//
#include
#define uint unsigned int
#define uchar unsigned char
uchar code dula[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x00,0x40};
uchar wula[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0,0,0};
uchar table[6]={1,2,0,0,4,8};//要显示的字符串
uchar temp[6]={10,10,10,10,10,10};//显示缓冲区
sbit arrow=P3^0;//30控制移动方向
sbit jia=P3^1;//P31加速度
sbit jian=P3^2;//P32减速度
sbit beep=P1^5;//每移动完整一次蜂鸣器响一下;
uchar num1,num2,miao,flag5ms,flag100ms,flag1s,i,N,flagbeep;
bit flagarrow;
void delay(uint z);
void display();
void tinic();
void main()
{ N=5;
tinic();
while(1)
{
if(arrow==0)
delay(100);
if(arrow==0)
{while(arrow==0);
flagarrow=~flagarrow; miao=0;
for(i=0;i<6;i++)//按一次变动方向,要对显示缓冲区清空
temp[i]=10; //不显示
}
if(jia==0)
delay(100);
if(jia==0)
{while(jia==0);if(N<2) N=1;else N--;}
if(jian==0)
delay(100);
if(jian==0)
{while(jian==0);N++;if(N>10) N=10;}
display();
if(flagbeep=1)
{flagbeep=0;
if(miao<1)
beep=0;
else beep=1;}
}
}
//-------------------
void timer0() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
num1++;
flag5ms=1;
if(num1==20)
{
num1=0;
num2++;
flag100ms=1;
if(num2==N)
{num2=0;
miao++;
if(miao>5)
{miao=0;flagbeep=1;
for(i=0;i<6;i++)//移动完一次要对显示缓冲区清空
temp[i]=10;}//不显示
flag1s=1;}
}
}
//----------------------
void tinic()
{
TMOD=0x01;
ET0=1;
EA=1;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
}
void delay(uint z)
{
uint x,y;
for(x=0;x
}
//=
void display()
{
uchar j;
if(flagarrow==1)
switch(miao)
{
case 0:temp[0]=table[5];break;
case 1:temp[0]=table[4];
temp[1]=table[5];break;
case 2:temp[0]=table[3];
temp[1]=table[4];
temp[2]=table[5];break;
case 3:temp[0]=table[2];
temp[1]=table[3];
temp[2]=table[4];
temp[3]=table[5];break;
case 4:temp[0]=table[1];
temp[1]=table[2];
temp[2]=table[3];
temp[3]=table[4];
temp[4]=table[5];break;
case 5:temp[0]=table[0];
temp[1]=table[1];
temp[2]=table[2];
temp[3]=table[3];
temp[4]=table[4];
temp[5]=table[5];break;
}
if(flagarrow==0)
switch(miao)
{
case 0:temp[5]=table[0];break;
case 1:temp[4]=table[0];
temp[5]=table[1];break;
case 2:temp[3]=table[0];
temp[4]=table[1];
temp[5]=table[2];break;
case 3:temp[2]=table[0];
temp[3]=table[1];
temp[4]=table[2];
temp[5]=table[3];break;
case 4:temp[1]=table[0];
temp[2]=table[1];
temp[3]=table[2];
temp[4]=table[3];
temp[5]=table[4];break;
case 5:temp[0]=table[0];
temp[1]=table[1];
temp[2]=table[2];
temp[3]=table[3];
temp[4]=table[4];
temp[5]=table[5];break;
}
for(j=0;j<6;j++)
{P0=dula[temp[j]];
P2=wula[j];
delay(5);
}
}
上一篇:简单的加法计算器单片机c程序设计
下一篇:向24C02中写入当前的时间
推荐阅读最新更新时间:2024-03-16 15:11
设计资源 培训 开发板 精华推荐
- 物联网、汽车、AI全覆盖——世平集团恩智浦解决方案大秀场
- 下载、答题赢好礼:使用Mentor的Xpedition Layout高效设计PCB
- phyBOARD-i.MX 8M Plus 开发板来袭 免费申请进行时!
- 【EEWORLD第二十三届】2011年02月社区明星人物揭晓!
- 【MPS有奖分享】便携式多功能电工台的核“芯”功能测试与结构设计
- 4小时实战+剖析:TI工程师教你快速上手 各种无线产品开发 (限量$14售CC1352R1无线开发板,助你参与动手实验)
- 文晔科技有奖直播:C2000在电机控制中的应用 等你来看!
- 第二届英飞凌【碳化硅应用技术】发展论坛
- 有奖直播|TI毫米波雷达在汽车领域的最新应用