?? 數碼管顯示1-8(改進).c
字號:
//***************WINAVR V1.41編譯*****************//
#include"avr/io.h" //頭文件
#define uchar unsigned char //數據類型說明
#define uint unsigned int //數據類型說明
uchar dis_code[11]={0xc0,0xf9,0xa4,0xb0,0x99, // 0, 1, 2, 3,4,
0x92,0x82,0xf8,0x80,0x90, 0xff} ;// 5, 6, 7, 8, 9, off
uchar dis_buf[8] ;
uchar dis_index ;
uchar dis_digit ;
void DelayMs(uint i) //Ms級延時函數,參數i:延時時間
{uint j ;
for( ;i!=0 ;i--)
{for(j=8000 ;j!=0 ;j--) ;}
}
// dis_index --- 顯示索引, 用于標識當前顯示的數碼管和緩沖區的偏移量。
// dis_digit --- 位選通值, 傳送到PB口用于選通當前數碼管的數值。
// dis_buf --- 顯于緩沖區基地址。
void main()
{
DDRA=0xFF ; //置PA口為輸出
PORTA=0xFF ;
DDRC=0xFF ;
PORTC=0xFF ; //置PC口為輸出
uchar i ;
for(i=0 ;i< ;8 ;i++)
{
dis_buf [ i ] = dis_code[i+1] ;
}
dis_digit = 0xfe ; //預置位掃描初值。
dis_index = 0 ;
while(1)
{
PORTC=0xFF ; // 先關閉所有數碼管
PORTA=dis_buf[dis_index] ; // 顯示代碼傳送到PA口
PORTC=dis_digit ; // 位選通值傳送到PC口
DelayMs(10) ;
dis_digit=(dis_digit< ;< ;1)|0x01 ; // 位選通值左移, 下次選通下一位數碼管
dis_index++ ;
if(dis_index == 0x08) // 8個數碼管是否全部掃描完一遍?
{dis_digit = 0xfe ; // 重裝初值
dis_index = 0 ;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -