📄 main.c
字号:
#include <iom8v.h>
#include <macros.h>
extern void led_init(void);
extern void timer0_init(void);
extern void TWI_init(void);
extern unsigned char LedNum[8];
unsigned char StartShow=0xff;
void Delay(unsigned int ms);
//#pragma data:eeprom
char cDataBuff[]={1,3,1,0,0,6,5,1,
3,9,8,10,10,8,7,8,
0,7,2,2,6,10,10,6,
1,2,6,4,2,1,
8,10}; //10用来分隔两次显示(LED熄灭)
//#pragma data:data
void main(void)
{
unsigned char cTemp;
unsigned char cNum;
unsigned char *p;
led_init();
timer0_init();
TWI_init();
SEI();
for(cNum=9;cNum!=0xff;cNum--)
{
p=LedNum;
*p++=cNum;
*p++=cNum;
*p++=cNum;
*p++=cNum;
*p++=cNum;
*p++=cNum;
*p++=cNum;
*p=cNum;
Delay(200);
}
DDRC|=0b00001000;
PORTC&=0b11110111;//点亮指示灯
while(1)
{
p=LedNum;
for(cNum=7;cNum!=0xff;cNum--)//将LED的8位数码管全部熄灭-全部置为10
{
*p++=10;
}
Delay(300);
StartShow=0x00;
/*For为Main程序中的主循环,如果没有要求StartShow,程序将不停循环*/
for(cNum=0;StartShow!=0xff;cNum++)//将LED的8位数码管向前移位,最后位用数据缓冲区的数据补充进去
{
p=&LedNum[7];
cTemp=*(--p);
LedNum[7]=cTemp;
cTemp=*(--p);
LedNum[6]=cTemp;
cTemp=*(--p);
LedNum[5]=cTemp;
cTemp=*(--p);
LedNum[4]=cTemp;
cTemp=*(--p);
LedNum[3]=cTemp;
cTemp=*(--p);
LedNum[2]=cTemp;
cTemp=*(--p);
LedNum[1]=cTemp;
cNum&=0b00011111;//如果超过数据缓冲区,则恢复的起始地址
cTemp=cDataBuff[cNum];
LedNum[0]=cTemp;
Delay(300);
}
}
}
void Delay(unsigned int ms)
{
unsigned int iTemp;
unsigned int iUs;
for(iTemp=ms;iTemp>0;iTemp--)
{
for(iUs=1000;iUs>0;iUs--);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -