飞思卡尔单片机各种功能程序
流水灯四种效果:
#include
#include
#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: } } }
相关推荐:
- [建筑文档]2018年公需课:专业技术人员创新能力与
- [建筑文档]2013年福建教师招考小学数学历年真题
- [建筑文档]高中信息技术课flash知识点总结 - 图文
- [建筑文档]电工实训 - 图文
- [建筑文档]最高院公告案例分析100篇(民商篇)
- [建筑文档]南开中学高2017级14-15学年(上)期末
- [建筑文档]五粮液集团战略分析
- [建筑文档]鲁教版(2012秋季版)九年级化学 酸碱
- [建筑文档]超星尔雅2017中国哲学概论自整理题库答
- [建筑文档]关于成为海口金盘饮料公司材料独家供货
- [建筑文档]LNG学习资料第一册 基础知识 - 图文
- [建筑文档]四年级品社下册《好大一个家》复习资料
- [建筑文档]现阶段领导权力腐败的特点及发展趋势
- [建筑文档]魏晋南北朝诗歌鉴赏—嵇康
- [建筑文档]坚持追求真爱是理智的行为 正方一辩稿
- [建筑文档]湘西州刑释解教人员帮教安置工作存在的
- [建筑文档]园林工程试题库及答案
- [建筑文档]计算机长期没有向WSUS报告状态
- [建筑文档]日语最新流行语
- [建筑文档]B62-016 景观进场交底专题会议
- 2018年中考语文课内外古诗词鉴赏专题复
- 高考试题研究心得体会
- C语言基础题及答案
- 电气控制及PLC习题及答案
- 都昌小学家长学校汇报材料
- GMAT作文模板正确使用方法
- 俄军办坦克大赛:中国99式有望与豹2A6
- 成本会计练习题
- 酒店餐饮业最流行的5S管理方法
- 2014-2015学年山东省菏泽市高二(下)
- 《黄鹤楼送孟浩然之广陵》教案、说课、
- 2013年结构化学自测题 有答案版
- 2011西安世界园艺博览会游览解说词(附
- 窗口文明单位示范单位创建活动总结
- 2018满分超星尔雅就业课后练习期末答案
- 韶山市城市总体规划-基础资料
- 苏教版第三单元知识点归纳
- 第4章 曲轴模态分析
- 加大查办案件力度的思考
- 武汉CPC导轨介绍




