专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

在8个LED上依次显示1~8数字

作者:佚名   来源:本站原创   点击数:  更新时间:2008年07月08日   【字体:

#include "p18f458.h"

static volatile int table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};
volatile unsigned char data;

/*初始化子程序*/
//该程序用于在8个LED上依次显示1~8
// http://www.51hei.com 单片机网员工编写此程序
//此程序为pic单片机设计
void initial()
{
 TRISA=0x00;     /*A口设置为输出*/
 TRISC=0x00;     /*SDO引脚为输出,SCK引脚为输出*/
 INTCON=0x00;    /*关闭所有中断*/
 SSPCON1=0x30;    /*SSPEN=1;CKP=1,FOSC/4*/
 SSPSTAT=0xC0;    /*时钟下降沿发送数据*/
 PIR1=0;      /*清除SSPIF标志*/ 
}

/*显示子程序*/
void SPILED(char data)
{
 PORTAbits.RA5=0;    /*LACK送低电平,为锁存做准备*/
 SSPBUF=data;     /*启动发送*/
 do
 {
 ;
 }while(PIR1bits.SSPIF==0);  /*等待发送完毕*/
 PIR1bits.SSPIF=0;    /*清除SSPIF标志*/
 PORTAbits.RA5=1;    /*最后给锁存信号,代表显示任务完成*/
}

/*主程序*/
main()
{
 unsigned  i;
 initial();      /*系统初始化*/
  for(i=8;i>0;i--)    /*连续发送8个数据*/
   {
  data=table[i];    /*通过数组的转换获得待显示的段码*/ 
  SPILED(data);    /*发送显示段码显示*/  
   }
 for(;;)
 {
 }
}
 

关闭窗口