我想写一个八位数码管每个数码管依次移动显示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++);
}
}
仿真电路图:
-
一周热门 更多>