做網(wǎng)站找哪家好熊掌號(hào)英文關(guān)鍵詞seo
目錄
一、補(bǔ)充 (code)
二、例程
(1)例程1:數(shù)碼管顯示某一位(某一杠)。以點(diǎn)亮8段數(shù)碼管最上面的橫杠為例。
(2)例程2:數(shù)碼管的8個(gè)段依次點(diǎn)亮(其他保持熄滅)
(3)例程3:數(shù)碼管顯示某一個(gè)數(shù)值。(本例以點(diǎn)亮8段數(shù)碼管顯示數(shù)組“1”為例)
(4)例程4:數(shù)碼管依次顯示0-9、-、全部熄滅,顯示間隔為500MS;
(5)例程5:數(shù)碼管依次顯示:0-9、-、全部熄滅,每隔數(shù)碼管顯示間隔500MS;要求數(shù)碼管碼值使用數(shù)組,功能函數(shù)使用for循環(huán)。
(6)例程6:按鍵控制數(shù)碼管顯示。S7、S6、S5、S4按鍵分別控制數(shù)碼管顯示1、2、3、4數(shù)字。
(7)例程7:按鍵控制數(shù)碼管正及時(shí)、倒計(jì)時(shí)。本例以S7按鍵按下數(shù)碼管開(kāi)始0->9正計(jì)時(shí)、S6按鍵按下數(shù)碼管開(kāi)始9->0倒計(jì)時(shí)。注意:按鍵采用松手檢測(cè)
一、補(bǔ)充 (code)
unsigned char code SEG[] = {0XF0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char SEG[] = {0XF0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
區(qū)別:不寫(xiě)code(程序讀取快),代表所創(chuàng)建的數(shù)組被單片機(jī)從程序存儲(chǔ)器中讀取,存入單片機(jī)的內(nèi)存中(IM);寫(xiě)code(程序讀取較慢,不影響數(shù)碼管)代表所創(chuàng)建的數(shù)組直接存儲(chǔ)到程序存儲(chǔ)器中,單片機(jī)不會(huì)把數(shù)組存入IM中;但是如果編寫(xiě)點(diǎn)陣等,是推薦寫(xiě)code。
二、例程
(1)例程1:數(shù)碼管顯示某一位(某一杠)。以點(diǎn)亮8段數(shù)碼管最上面的橫杠為例。
//頭文件聲明區(qū)域
#include <STC15F2K60S2.H>//程序主體
void main()
{P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開(kāi)第一個(gè)數(shù)碼管程序P0 = 0XFE;//1111 1110while(1);}
(2)例程2:數(shù)碼管的8個(gè)段依次點(diǎn)亮(其他保持熄滅)
//頭文件聲明區(qū)域
#include <STC15F2K60S2.H>
#include<intrins.h>
//變量聲明區(qū)域
unsigned char SEG = 0;//函數(shù)定義區(qū)域
void Delay(unsigned int time) //@11.0592MHz
{unsigned char i, j;while(time--){_nop_();i = 2;j = 199;do{while (--j);} while (--i);}}}
void SEG_Left(void)
{for(SEG = 0;SEG < 8;SEG++){P0 = ~(0x01<<i);Delay(500);}}//程序主體
void main()
{P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開(kāi)第一個(gè)數(shù)碼管程序while(1){SEG_Left();}}
(3)例程3:數(shù)碼管顯示某一個(gè)數(shù)值。(本例以點(diǎn)亮8段數(shù)碼管顯示數(shù)組“1”為例)
//頭文件聲明區(qū)域
#include <STC15F2K60S2.H>//程序主體
void main()
{P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開(kāi)第一個(gè)數(shù)碼管程序P0 = 0XF9;while(1);}
(4)例程4:數(shù)碼管依次顯示0-9、-、全部熄滅,顯示間隔為500MS;
#include <STC15F2K60S2.H>void main()
{P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開(kāi)第一個(gè)數(shù)碼管程序while(1){P0 = 0XC0; Delay(500);//0P0 = 0XF9; Delay(500);//1P0 = 0XA4; Delay(500);//2P0 = 0XB0; Delay(500);//3P0 = 0X99; Delay(500);//4P0 = 0X92; Delay(500);//5P0 = 0X82; Delay(500);//6P0 = 0XF8; Delay(500);//7P0 = 0X80; Delay(500);//8P0 = 0X90; Delay(500);//9P0 = 0XBF; Delay(500);//-P0 = 0XFF; Delay(500);//全部熄滅}}
(5)例程5:數(shù)碼管依次顯示:0-9、-、全部熄滅,每隔數(shù)碼管顯示間隔500MS;要求數(shù)碼管碼值使用數(shù)組,功能函數(shù)使用for循環(huán)。
//頭文件聲明區(qū)域
#include <STC15F2K60S2.H>
#include<intrins.h>
//變量聲明區(qū)域
unsigned char code SEG[] = {0XF0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned int i = 0;
//函數(shù)定義區(qū)域
void Delay(unsigned int time) //@11.0592MHz
{unsigned char i, j;while(time--){_nop_();i = 2;j = 199;do{while (--j);} while (--i);}}//程序主體
void main()
{P2 = 0XA0;P0 = 0X00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開(kāi)第一個(gè)數(shù)碼管程序while(1){for(i = 0;i < 11;i++){P0 = SEG[i];Delay(500);}}}
(6)例程6:按鍵控制數(shù)碼管顯示。S7、S6、S5、S4按鍵分別控制數(shù)碼管顯示1、2、3、4數(shù)字。
//頭文件聲明區(qū)域
#include <STC15F2K60S2.H>
#include<intrins.h>
//變量聲明區(qū)域
unsigned char code SEG[] = {0XF0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char S7_Flag = 0,S6_Flag = 0,S5_Flag = 0,S4_Flag = 0;
//函數(shù)定義區(qū)域
void Delay(unsigned int time) //@11.0592MHz
{unsigned char i, j;while(time--){_nop_();i = 2;j = 199;do{while (--j);} while (--i);}}
//按鍵掃描函數(shù)
void KeyScan(void)
{if(P30 == 0){Delay(10);if(P30 == 0) S7_Flag = 1;while(!P30);}else if(P31 == 0){Delay(10);if(P31 == 0) S6_Flag = 1;while(!P30);}else if(P32 == 0){Delay(10);if(P32 == 0) S5_Flag = 1;while(!P30);}else if(P31 == 0){Delay(10);if(P33 == 0) S4_Flag = 1;while(!P30);}}//程序主體
void main()
{P2 = 0XA0;P0 = 0X00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開(kāi)第一個(gè)數(shù)碼管程序while(1){KeyScan();if(P30 == 0) {S7_Flag = 0;P0 = SEG[1];}if(P31 == 0) {S6_Flag = 0;P0 = SEG[2];}if(P32 == 0) {S5_Flag = 0;P0 = SEG[3];}if(P33 == 0) {S4_Flag = 0;P0 = SEG[4];}}}
(7)例程7:按鍵控制數(shù)碼管正及時(shí)、倒計(jì)時(shí)。本例以S7按鍵按下數(shù)碼管開(kāi)始0->9正計(jì)時(shí)、S6按鍵按下數(shù)碼管開(kāi)始9->0倒計(jì)時(shí)。注意:按鍵采用松手檢測(cè)
//頭文件聲明區(qū)域
#include <STC15F2K60S2.H>
#include<intrins.h>
//變量聲明區(qū)域
unsigned char code SEG[] = {0XF0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char S7_Flag = 0,S6_Flag = 0,S5_Flag = 0,S4_Flag = 0;
unsigned char SEG_Flag = 0;
unsigned int i = 0;
//函數(shù)定義區(qū)域
void Delay(unsigned int time) //@11.0592MHz
{unsigned char i, j;while(time--){_nop_();i = 2;j = 199;do{while (--j);} while (--i);}}
//按鍵掃描函數(shù)
void KeyScan(void)
{if(P30 == 0){Delay(10);if(P30 == 0) S7_Flag = 1;while(!P30);}else if(P31 == 0){Delay(10);if(P31 == 0) S6_Flag = 1;while(!P30);}else if(P32 == 0){Delay(10);if(P32 == 0) S5_Flag = 1;while(!P30);}else if(P31 == 0){Delay(10);if(P33 == 0) S4_Flag = 1;while(!P30);}}//程序主體
void main()
{P2 = 0XA0;P0 = 0X00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開(kāi)第一個(gè)數(shù)碼管程序while(1){KeyScan();if(P30 == 0) {S7_Flag = 0;SEG_Flag = 1;}if(P31 == 0) {S6_Flag = 0;SEG_Flag = 2;}if(SEG_Flag == 1) //正計(jì)時(shí){for(i = 0;i < 10;i++){P0 = SEG[i];Delay(1000);}}if(SEG_Flag == 2) //倒計(jì)時(shí){for(i = 9;i >= 0;i--){P0 = SEG[i];Delay(1000);}}}}