基于PIC18F45K22的几个小程序文档格式.docx
《基于PIC18F45K22的几个小程序文档格式.docx》由会员分享,可在线阅读,更多相关《基于PIC18F45K22的几个小程序文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
![基于PIC18F45K22的几个小程序文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/21/080ca1dc-6223-432f-83fa-ac33b93444fb/080ca1dc-6223-432f-83fa-ac33b93444fb1.gif)
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