教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 建筑文档 >

飞思卡尔单片机各种功能程序

来源:网络收集 时间:2026-02-12
导读: 流水灯四种效果: #include /* common defines and macros */ #include #include /* derivative information */ #pragma LINK_INFO DERIVATIVE \ #include \ unsigned char temp; //unsigned char pa @0x200; //unsigned char pb @0x202; unsigned char key;

流水灯四种效果:

#include /* common defines and macros */ #include

#include /* derivative information */ #pragma LINK_INFO DERIVATIVE \

#include \ unsigned char temp;

//unsigned char pa @0x200; //unsigned char pb @0x202; unsigned char key;

static void delay(void) { volatile unsigned long i; for(i=0;i<100000;i++); }

static unsigned char random;

static void Random(void) {

random = (unsigned char)rand(); }

void effect1() {

unsigned char c; for(c=0;c<=6;c++) { delay();

PORTB = ~(1<

for(c=7;c>=1;c--) { delay();

PORTB = ~(1<

void effect2() {

unsigned char c; for(c=0;c<=6;c++) { delay();

PORTB = ~(3<

for(c=7;c>=1;c--) {

delay();

PORTB = ~(3<

void effect3() {

unsigned char c,t=0xfe; for(c=0;c<=7;c++) { PORTB = t; delay(); t<<=1; } }

void effect4() {

unsigned char c,t=0; for(c=0;c<=7;c++) { PORTB=t; delay();

t = (t<<1)+1;; } }

void main(void) { unsigned char x; DDRA=0xf0; DDRB=0xff;

for(;;) {

x=PORTA&0x03; switch(x) {

case 0:effect1(); break; case 1:effect2(); break; case 2:effect3(); break;

case 3:effect4(); break; }

}/* wait forever */

/* please make sure that you never leave this function */ }

//行列反转法

unsigned char key_scan() //键盘扫描函数 { unsigned char x,row=4,col=4,key=16;

PUCR|=0x01; //等同于PUCR=PUCR|0x01,PUCR寄存器的第0位设置为1,即允许PORTA端口的上拉电阻。PUCR寄存器的解释参见书本P113

DDRA=0x0f; //行线PA0-PA3设置为输出,列线PA4-PA7设置为输入 DDRA寄存器知识参见书本P113数据方向寄存器

PORTA=0xf0; //0bxxxx0000,四条行线PA0-PA3输出四个0,相当于四条行线接地 x=PORTA&0xf0; //读取四条列线的值,并保留高4位,清除低4位的值 if(x!=0xf0) //如果四条列线不全为1,则说明有按键按下 {

switch(x) {

case 0xe0:col=1;break; //按键在第1列 case 0xd0:col=2;break; //按键在第2列 case 0xb0:col=3;break; //按键在第3列 case 0x70:col=4;break; //按键在第4列 }

//以下开始行列反转,输入变输出,输出变输入。即行线PA0-PA3设为输入,列线PA4-PA7设为输出

DDRB=0xf0; //行线PA0-PA3设为输入,列线PA4-PA7设为输出

PORTA=0x0f;//0b0000xxxx,四条列线PA4-PA7输出四个0,相当于四条列线接地 x=PORTA&0x0f //读取四条行线的值,并保留低4位,清除高4位的值 if(x!=0x0f)//如果四条行线不全为1,则说明有按键按下 { switch(x) {

case 0x0e:row=1;break; //按键在第1行 case 0x0d:row=2;break; //按键在第2行 case 0x0b:row=3;break; //按键在第3行 case 0x07:row=4;break; //按键在第4行 }

key=(row-1)*4+col-1; //求出键号:0-15的整数 } }

return key; //如果没有按键按下,则函数返回的key=16; }

main()

{ unsigned char keyno; while(1) {

keyno=key_scan(); //调用键盘扫描函数获取是否有按键按下,是哪个按键按下 if(keyno<16) //keyno<16有按键按下,keyno=16则表明无按键按下 switch(keyno)

{ case 0: //每一个按键按下后要实现什么功能,程序写在这。 case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: } } }

//行扫描法1

unsigned char key_scan()

{ unsigned char x,i,temp,row=4,col=4,key=16;

//PUCR|=0x01; //等同于PUCR=PUCR|0x01,PUCR寄存器的第0位设置为1,即允许PORTA端口的上拉电阻。PUCR寄存器的解释参见书本P113

DDRA=0x0f; //行线PA0-PA3设置为输出,列线PA4-PA7设置为输入 DDRA寄存器知识参见书本P113数据方向寄存器

PORTA=0xf0; //0bxxxx0000,四条行线PA0-PA3输出四个0,相当于四条行线接地 x=PORTA&0xf0; //读取四条列线的值,并保留高4位,清除低4位的值 if(x!=0xf0) //如果四条列线不全为1,则说明有按键按下 {

switch(x) {

case 0xe0:col=1;break; //按键在第1列 case 0xd0:col=2;break; //按键在第2列 case 0xb0:col=3;break; //按键在第3列 case 0x70:col=4;break; //按键在第4列 }

//以下开始从第1行到第4行逐行判断按键是否在该行 temp=0b11111110;

for(i=1;i<=4;i++) //i代表正在判断按下的按键是否是在第i行 {

PORTA=temp; //第i行所在的行线输出0,其他三条行线输出1

x=PORTA&0xf0;//读取四条列线的值,并保留高4位,清除低4位的值

if(x!=0xf0) //如果四条列线不全为1,则说明按键就在第i行,否则表明按键不在该行,则准备扫描下一行 { row=i;

key=(row-1)*4+col-1; //求出按键 return key; //退出key_scan函数 }

temp=(temp<<1) +1; //按键不在该行,则改变temp的值,为扫描下一行做准备。 } }

return key; //如果没有按键按下,程序才回执行到这,此时key为初值16; }

main()

{ unsigned char keyno; while(1) {

keyno=key_scan(); //调用键盘扫描函数获取是否有按键按下,是哪个按键按下 if(keyno<16) //keyno<16有按键按下,keyno=16则表明无按键按下 switch(keyno)

{ case 0: //每一个按键按下后要实现什么功能,程序写在这。 case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: } } }

…… 此处隐藏:1330字,全部文档内容请下载后查看。喜欢就下载吧 ……
飞思卡尔单片机各种功能程序.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/682439.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)