有会atmega16的朋友吗?帮忙看看我这个程序 /哭笑

2019-07-15 07:41发布

我想写一个八位数码管每个数码管依次移动显示0,1,2,3,4,5,6,7(只每次显示一个),但是不懂什么原因,无法显示。。。。然后我做了一些尝试主程序中,如果while(1)替换delay(10),则第一个显示0,此时i替换成0,1,2,···是可以在对应位置显示数字的;如果while(1)不替换delay(10),数码管无显示。然后重点是怎么让八位数码管每个数码管依次移动显示0,1,2,3,4,5,6,7(只每次显示一个)?


序如下
#include<iom16v.h>
#include<macros.h>


#define uchar unsigned char
#define uint unsigned int


#define smgen_set PORTB |= BIT (7)
#define smgen_clr PORTB &=~BIT (7)
#define rs_set PORTB |=BIT (6)
#define rs_clr PORTB &=~BIT (6)


unsigned char table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
unsigned char table2[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void delay();


void main()
{
uint i;


DDRB = 0XFF;
PORTB = 0X00;
DDRC = 0XFF;
PORTC = 0X00;


while(1)
{
  for(i = 0;i < 8;i++)
  {
   rs_set;
   PORTC = table2;
   rs_clr;
   smgen_set;
   PORTC = table1;
   smgen_clr;
//    while(1);//如果while(1)替换delay(10),则第一个显示0,此时i替换成0,1,2,···是可以在对应位置显示数字的。
   delay(10);//如果while(1)不替换delay(10),数码管无显示。  }
}
}
void delay(uint k)
{
uint x,j;
for(x=0;x<k;x++)
{
  for(j=0;j<570;j++);
}
}
仿真电路图



捕获.PNG
0条回答

一周热门 更多>