/**********************************************************************
頭文件
**********************************************************************/
#include <iom8v.h> //包含型號頭文件
#include <macros.h> //包含"位"操作頭文件
#include <delay8.h> //包含"延時"操作頭文件
/********************************************************************
數據類型定義
*********************************************************************/
#define uchar unsigned char
#define uint unsigned int
#define PC0_set PORTC |= BIT(0)//PC0置位
#define PC0_clt PORTC &=~BIT(0)//PC0清零
#define PC1_set PORTC |= BIT(1)//PC1置位
#define PC1_clt PORTC &=~BIT(1)//PC1清零
/********************************************************************
數碼管段碼定義
*********************************************************************/
uchar duan[16]=
{
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E
};//所需的段碼
uchar wei[8]=
{
0X10,0X20,0X40,0X80,
0X01,0X02,0X04,0X08
}; //位的控制端
uchar time[8]={0,0,0,0,0,0,0,0};//暫存數據
/********************************************************************
I/O端口初始化
*********************************************************************/
void init_IO(void)
{
// PB端口
DDRB=0XFF;
PORTB=0;
// PC端口
DDRC=0XFF;
PORTC=0X03;//0000 0011
// PD端口
DDRD=0XFF;
PORTD=0;
}
/********************************************************************
顯示函數
*********************************************************************/
void display(uchar *p)
{
uchar i;
for(i=0;i<8;i++)
{
PORTB=duan[*p];
p++;
PORTD=wei[i];
delay1ms(1);
}
}
/********************************************************************
EEPROM寫操作函數
*********************************************************************/
void EEPROM_write(uint addr,uint adata)
{
SREG&=~BIT(7);//關總中斷
while(EECR&BIT(EEWE));//檢測EEWE為0
EEAR=addr;//配置寫入地址
EEDR=adata;//配置寫入數據
EECR|=BIT(EEMWE);//主寫入使能置一
EECR|=BIT(EEWE);//使能位置一
SREG|=BIT(7);//開總中斷
}
/********************************************************************
EEPROM讀操作函數
*********************************************************************/
uchar EEPROM_read(uint addr)
{
uchar edata;//讀變量
SREG&=~BIT(7);//關總中斷
while(EECR&BIT(EEWE));//等待EEWE操作結束
EEAR=addr;//寫入地址
EECR|=BIT(EERE);//EERE置1后,進行讀操作
edata=EEDR;//讀數據
SREG|=BIT(7);//開總中斷
return edata;//返回
}
/********************************************************************
主函數
*********************************************************************/
void main(void)
{
uchar i;
init_IO();//IO口初始化
i=EEPROM_read(2);//單片機第一次開機從EEPROM的第二位讀取一個數據
i++;//讀取完成后進行一次加1操作
EEPROM_write(2,i);//加1操作后存入EEPROM的第二位
while(1)
{
display(time);//顯示
}
}
我寫的單片機啟動 數碼管不會加 1 ,可否幫忙看看哪里出了問題。 |