• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

写了一下表情灯的单片机代码各位大神代码还有优化的地方吗

f3050c23ac53a106 2020-08-12 浏览量:335
#include<reg52.h>
sbit a=P0^0;
sbit b=P0^1;
sbit c=P0^2;
sbit OE0=P0^3;
sbit OE1=P0^4;
sbit OE2=P0^5;
sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit KEY3=P3^4;
sbit KEY4=P3^5;
unsigned char code LedChar[7][8]={
{0xC30x810x000x000x000x810xFF0xFF}
{0xFF0x810x000x000x000x810xFF0xFF}
{0xFF0xFF0x000x000x000xFF0xFF0xFF}
{0xFF0xFF0xFF0x000xFF0xFF0xFF0xFF}     //不按按键时
{0xEF0xDF0xBF0x000xBF0xDF0xEF0xFF}     //左转
{0xF70xFB0xFD0x000xFD0xFB0xF70xFF}      //右转
{0xFF0xFF0xFF0xFF0xFF0xFF0x660x99}      //W 
};     
unsigned char LedBuff[16]=
{0xFF0xFF0xFF0xFF0xFF0xFF0xFF0xFF
0xFF0xFF0xFF0xFF0xFF0xFF0xFF0xFF
};
void buan();          //不按按键函数
void ting();           //刹车时函数
void you();            //左转时函数
void zuo();            //右转时函数
void main()
{
TMOD=0x01;
TH0=0xFC;
TL0=0x67;
EA=1;
ET0=1;
TR0=1;
while(1)
{
   if(KEY1==0)
  {
   zuo();
  }
  else if(KEY2==0)
  {
   you();
  }
  else
  {
  buan();
  }
}
}
/@@*中断函数*/
void zhongduan() interrupt 1         //用于显示刷新

static unsigned char i=0;
TH0=0xFC;
TL0=0x67;
P1=0xFF;
switch(i)
{
  case 0:a=0;b=0;c=0;OE0=0;OE1=1;OE2=1;i++;P1=LedBuff[0];break;
  case 1:a=0;b=0;c=1;OE0=0;OE1=1;OE2=1;i++;P1=LedBuff[1];break;
  case 2:a=0;b=1;c=0;OE0=0;OE1=1;OE2=1;i++;P1=LedBuff[2];break;
  case 3:a=0;b=1;c=1;OE0=0;OE1=1;OE2=1;i++;P1=LedBuff[3];break;
  case 4:a=1;b=0;c=0;OE0=0;OE1=1;OE2=1;i++;P1=LedBuff[4];break;
  case 5:a=1;b=0;c=1;OE0=0;OE1=1;OE2=1;i++;P1=LedBuff[5];break;
  case 6:a=1;b=1;c=0;OE0=0;OE1=1;OE2=1;i++;P1=LedBuff[6];break;
  case 7:a=1;b=1;c=1;OE0=0;OE1=1;OE2=1;i++;P1=LedBuff[7];break;
  case 8:a=0;b=0;c=0;OE0=1;OE1=0;OE2=1;i++;P1=LedBuff[8];break;
  case 9:a=0;b=0;c=1;OE0=1;OE1=0;OE2=1;i++;P1=LedBuff[9];break;
  case 10:a=0;b=1;c=0;OE0=1;OE1=0;OE2=1;i++;P1=LedBuff[10];break;
  case 11:a=0;b=1;c=1;OE0=1;OE1=0;OE2=1;i++;P1=LedBuff[11];break;
  case 12:a=1;b=0;c=0;OE0=1;OE1=0;OE2=1;i++;P1=LedBuff[12];break;
  case 13:a=1;b=0;c=1;OE0=1;OE1=0;OE2=1;i++;P1=LedBuff[13];break;
  case 14:a=1;b=1;c=0;OE0=1;OE1=0;OE2=1;i++;P1=LedBuff[14];break;
  case 15:a=1;b=1;c=1;OE0=1;OE1=0;OE2=1;i=0;P1=LedBuff[15];break;
  default:break;
}
}
/@@*左转*/
void zuo()
{
LedBuff[0]=LedChar[4][0];
LedBuff[1]=LedChar[4][1];
LedBuff[2]=LedChar[4][2];
LedBuff[3]=LedChar[4][3];
LedBuff[4]=LedChar[4][4];
LedBuff[5]=LedChar[4][5];
LedBuff[6]=LedChar[4][6];
LedBuff[7]=LedChar[4][7];
LedBuff[8]=LedChar[6][0];
LedBuff[9]=LedChar[6][1];
LedBuff[10]=LedChar[6][2];
LedBuff[11]=LedChar[6][3];
LedBuff[12]=LedChar[6][4];
LedBuff[13]=LedChar[6][5];
LedBuff[14]=LedChar[6][6];
LedBuff[15]=LedChar[6][7];
}
/@@*右转*/
void you()
{
LedBuff[0]=LedChar[5][0];
LedBuff[1]=LedChar[5][1];
LedBuff[2]=LedChar[5][2];
LedBuff[3]=LedChar[5][3];
LedBuff[4]=LedChar[5][4];
LedBuff[5]=LedChar[5][5];
LedBuff[6]=LedChar[5][6];
LedBuff[7]=LedChar[5][7];
LedBuff[8]=LedChar[6][0];
LedBuff[9]=LedChar[6][1];
LedBuff[10]=LedChar[6][2];
LedBuff[11]=LedChar[6][3];
LedBuff[12]=LedChar[6][4];
LedBuff[13]=LedChar[6][5];
LedBuff[14]=LedChar[6][6];
LedBuff[15]=LedChar[6][7];
}
/@@*不按按键*/
void buan()
{
static unsigned char cnt=0;
static unsigned int jisu=0;
static unsigned char f=0;
LedBuff[0]=LedChar[cnt][0];
LedBuff[1]=LedChar[cnt][1];
LedBuff[2]=LedChar[cnt][2];
LedBuff[3]=LedChar[cnt][3];
LedBuff[4]=LedChar[cnt][4];
LedBuff[5]=LedChar[cnt][5];
LedBuff[6]=LedChar[cnt][6];
LedBuff[7]=LedChar[cnt][7];
LedBuff[8]=LedChar[6][0];
LedBuff[9]=LedChar[6][1];
LedBuff[10]=LedChar[6][2];
LedBuff[11]=LedChar[6][3];
LedBuff[12]=LedChar[6][4];
LedBuff[13]=LedChar[6][5];
LedBuff[14]=LedChar[6][6];
LedBuff[15]=LedChar[6][7];
for(f=0;f>50;f++);
jisu++;
if(jisu>=400)
{
  jisu=0;
  cnt++;
  if(cnt>=4)
  {
   cnt=0;
  }
}
}
芯片用的是74hc138
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这么多的赋值用for重写一下吧,更简洁。

    switch中的分一下类,可以少几个case

    • 发布于 2020-08-13
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4
  • 还能优化呀,可以采用指针访问修改变量
    • 发布于2020-08-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果运行没有问题,其实大可不必优化,这样的程序很清晰。

    上面提到的优化建议主要是从编码方便性上来说的,从运行效率上来说,其实你的也没有什么问题。

    • 发布于2020-08-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 那些赋值语句用for循环实现会让代码看起来更加思路清晰
    • 发布于2020-08-30
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

写了一下表情灯的单片机代码各位大神代码还有优化的地方吗