基于PIC18F45K22的几个小程序文档格式.docx

上传人:b****5 文档编号:20829253 上传时间:2023-01-25 格式:DOCX 页数:21 大小:112.11KB
下载 相关 举报
基于PIC18F45K22的几个小程序文档格式.docx_第1页
第1页 / 共21页
基于PIC18F45K22的几个小程序文档格式.docx_第2页
第2页 / 共21页
基于PIC18F45K22的几个小程序文档格式.docx_第3页
第3页 / 共21页
基于PIC18F45K22的几个小程序文档格式.docx_第4页
第4页 / 共21页
基于PIC18F45K22的几个小程序文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于PIC18F45K22的几个小程序文档格式.docx

《基于PIC18F45K22的几个小程序文档格式.docx》由会员分享,可在线阅读,更多相关《基于PIC18F45K22的几个小程序文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

基于PIC18F45K22的几个小程序文档格式.docx

265;

i++);

}

}

voidmain(void){

ANSELA=0;

TRISA=0;

while

(1)

PORTA=~PORTA;

DelayMS(100);

02从左到右的流水灯

从左到右的流水灯

接在RC口的8个LED从左到右循环依次点亮,产生走马灯效果

ucharj;

ANSELC=0;

TRISC=0;

PORTC=0x01;

for(j=8;

j>

0;

j--)

DelayMS(1000);

PORTC=PORTC<

<

1;

}

038只LED左右来回点亮

8只LED左右来回点亮

程序利用循环移位函数_crol_和_cror_形成来回滚动的效果

for(j=7;

}

for(j=7;

PORTC=PORTC>

>

06单只数码管循环显示0~9

/*名称:

单只数码管循环显示0~9

主程序中的循环语句反复将0~9的段码送至P0口,使数字0~9循环显示

constromucharDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

for(j=0;

j<

10;

j++)

PORTC=~DSY_CODE[j];

}

078只数码管滚动显示单个数字

8只数码管滚动显示单个数字

数码管从左到右依次滚动显示0~7,程序通过每次仅循环选通一只数码管

uchari;

ucharwei=0x80;

PORTC=0;

ANSELD=0;

PORTD=0;

TRISD=0;

for(i=0;

8;

i++)

{

PORTC=0xff;

//关闭显示

wei=0x80>

i;

PORTC=~DSY_CODE[i];

//发送数字段码

PORTD=~wei;

//发送位码

DelayMS(300);

}

088只数码管动态显示多个不同字符

8只数码管动态显示多个不同字符

数码管动态扫描显示0~7。

PORTD=0xff;

DelayMS

(2);

098只数码管闪烁显示数字串

电路如上图

8只数码管闪烁显示数字串

数码管闪烁显示由0~7构成的一串数字

本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。

//位码表

constromucharDSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uchari,j;

30;

{

for(j=0;

{

PORTD=0xff;

PORTC=~DSY_CODE[j];

//发送段码

PORTD=~DSY_IDX[j];

//发送位码

DelayMS

(2);

}

PORTD=0xff;

//关闭所有数码管并延时

DelayMS(1000);

108只数码管滚动显示数字串

8只数码管滚动显示数字串

数码管向左滚动显示3个字符构成的数字串

constromucharNum[]={10,10,10,10,10,10,10,10,2,9,8};

uchari,j,k,m;

15;

{//发送段码,采用环形取法,从第k个开始取第j个

PORTC=~DSY_CODE[Num[(k+j)%11]];

m=0x80>

j;

PORTD=~m;

k=(k+1)%11;

//环形队列首支针k递增,Num下标范围0~10,故对11取余

11K1-K4控制LED移位

K1-K4控制LED移位

按下K1时,RC口LED上移一位;

按下K2时,RC口LED下移一位;

按下K3时,RD口LED上移一位;

按下K4时,RD口LED下移一位;

*/

voidMove_LED(void)

if((PORTB&

0x10)==0)

if(PORTC==0x80)

PORTC=0x01;

else

PORTC=PORTC<

elseif((PORTB&

0x20)==0)

if(PORTC==0x01)

PORTC=0x80;

else

PORTC=PORTC>

}//K2

0x40)==0)

if(PORTD==0x80)

PORTD=0x01;

PORTD=PORTD<

}//K3

0x80)==0)

if(PORTD==0x01)

PORTD=0x80;

PORTD=PORTD>

//K1

}//K4

ucharRecent_Key=0xff;

//最近按键

ANSELB=0;

PORTB=0;

TRISB=0xff;

INTCON2bits.RBPU=0;

/*开启B口弱上拉*/

PORTD=0x01;

if(Recent_Key!

=PORTB)

Recent_Key=PORTB;

Move_LED();

DelayMS(10);

12K1-K4按键状态显示

K1-K4按键状态显示

K1、K2按下时LED点亮,松开时熄灭,

K3、K4按下并释放时LED点亮,再次按下并释放时熄灭;

电路同上

PORTCbits.RC0=~PORTBbits.RB4;

PORTCbits.RC1=~PORTBbits.RB5;

if(PORTBbits.RB6==0)

while(PORTBbits.RB6==0);

PORTCbits.RC2=~PORTCbits.RC2;

if(PORTBbits.RB7==0)

while(PORTBbits.RB7==0);

PORTCbits.RC3=~PORTCbits.RC3;

13K1-K4分组控制LED

K1-K4分组控制LED

每次按下K1时递增点亮一只LED,全亮时再次按下则再次循环开始,

K2按下后点亮上面4只LED,K3按下后点亮下面4只LED,K4按下后关闭所有LED电路同上

ucharRecent_Key=0xff,Key_State,k;

Recent_Key=PORTB;

if(Recent_Key!

=0xff)

if(Recent_Key!

=PORTB)continue;

//取得4位按键值,由模式XXXX1111(X中有一位为0,其他均为1)

//变为模式0000XXXX(X中有一位为1,其他均为0)

while(PORTB!

=0xff);

Key_State=~Recent_Key>

4;

k=0;

//检查1所在位置,累加获取按键号k

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1