51单片机c语言源程序(2).doc_第1页
51单片机c语言源程序(2).doc_第2页
51单片机c语言源程序(2).doc_第3页
51单片机c语言源程序(2).doc_第4页
51单片机c语言源程序(2).doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

51单片机c语言源程序(2)键盘控制部分-源程序由东流电子编写,文档由本人整理上传/* 文件名 : 独立按键.c* 描述 : 该程序实现独立按键的判断,按了相应的独立按键后,在LED上进行表现。 按了S19,LED1亮。 按了S18,LED2亮。 按了S17,LED3亮。* 创建人 : 东流,2012年2月7日* 版本号 : 1.0*/#include#define uchar unsigned char#define uint unsigned intsbit KEY1 = P32; sbit KEY2 = P33;sbit KEY3 = P34;sbit LED1 = P00;sbit LED2 = P01;sbit LED3 = P02; /* 名称 : Delay()* 功能 : 延时,延时时间为 10ms * del* 输入 : del* 输出 : 无*/void Delay(uint del)uint i,j;for(i=0; idel; i+)for(j=0; j1827; j+) ;/* 名称 : Delay()* 功能 : 实现按键功能,并在LED上显示* 输入 : 无* 输出 : 无*/void KEY()if(KEY1=0 | KEY2=0 | KEY3=0)Delay(2); /20毫秒软件防抖if(KEY1 = 0) LED1 = 0;LED2 = 1;LED3 = 1;if(KEY2 = 0)LED1 = 1;LED2 = 0;LED3 = 1;if(KEY3 = 0)LED1 = 1;LED2 = 1;LED3 = 0; Delay(50);/延时0.5秒再进行下次按键的检测/* 名称 : Main()* 功能 : 实现按键控制LED的显示* 输入 : 无* 输出 : 无*/void Main(void)while(1) KEY();/* 文件名 : 数码管字符显示.c* 描述 : 按下S19按键,数码管上显示的数字加1。* 创建人 : 东流,2012年2月7日* 版本号 : 1.0*/#include#define uchar unsigned char#define uint unsigned intsbit KEY = P32;uchar table16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/* 名称 : Delay()* 功能 : 延时,延时时间为 10ms * del* 输入 : del* 输出 : 无*/void Delay(uint del)uint i,j;for(i=0; idel; i+)for(j=0; j1827; j+) ;/* 名称 : Main()* 功能 : 数码管的显示* 输入 : 无* 输出 : 无*/void Main(void)uchar i = 0;P2 = 7;while(1)P0 = tablei%16; /这里i%16是防止table中的数据在0-15,不会溢出if(KEY = 0)i+;Delay(30); /延时0.3秒,防止按一次按键,程序自加多次的情况/* 文件名 : 独立按键.c* 描述 : 数码管上最开始显示“88”。 按S19,数码管上的值减1. 按S17,数码管上的值加1.* 创建人 : 东流,2012年2月7日* 版本号 : 1.0*/#include#define uchar unsigned char#define uint unsigned intsbit KEY1 = P32; sbit KEY2 = P33;sbit KEY3 = P34;uint i=88;/数码管的段码编码uchar table16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/下一行的数组可以显示数值外,还可以显示数码管的点uchar table_d16 = 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1;/* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无*/void Delay_1ms(uint i)uint x,j;for(j=0;ji;j+)for(x=0;x=148;x+);/* 名称 : Delay()* 功能 : 延时,延时时间为 10ms * del* 输入 : del* 输出 : 无*/void Delay(uchar temp)uchar j;for(j=0;jtemp;j+)P0 = table(i/10)%10;P2 = 6; Delay_1ms(5);P0 = tablei%10;P2 = 7; Delay_1ms(5);/* 名称 : Delay()* 功能 : 实现按键功能,并在LED上显示* 输入 : 无* 输出 : 无*/uchar KEY(void)if(KEY1=0 | KEY2=0 | KEY3=0)Delay(2); /20毫秒软件防抖if(KEY1 = 0) Delay(10);return 1;if(KEY2 = 0)Delay(10);return 2;if(KEY3 = 0)Delay(10);return 3; Delay(10);return 0;/* 名称 : Main()* 功能 : 实现按键控制LED的显示* 输入 : 无* 输出 : 无*/void Main(void)uchar temp;while(1)temp = KEY();if(temp = 1)i-;if(temp = 3)i+; P0 = 0;P2 = 6; P0 = table(i/10)%10;Delay_1ms(3); P0 = 0;P2 = 7; P0 = tablei%10;Delay_1ms(3);/* 文件名 : 独立按键.c* 描述 : 这个代码相对于初学者比较麻烦一些。 在数码管上显示全是0. 当按下S18,这个时候是选择某一位数码管,数码管会稍微亮一些。 当按下S19或S17, 这时被选择的那位数码管可以进行加减控制。* 创建人 : 东流,2012年2月7日* 版本号 : 1.0*/#include#define uchar unsigned char#define uint unsigned intsbit KEY1 = P32; sbit KEY2 = P33;sbit KEY3 = P34;/数码管的段码编码uchar table10 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar SLED8=0;/* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无*/void Delay_1ms(uint i)uint x,j;for(j=0;ji;j+)for(x=0;x=148;x+);/* 名称 : Delay()* 功能 : 延时,延时时间为 16ms * del, 在延时函数中加入了数码管的操作, 这样按下按键后延时,数码管不会闪烁。* 输入 : del* 输出 : 无*/void Delay(uchar temp)uchar i,j;for(j=0;jtemp;j+)for(i=0;i8;i+)P0 = 0;P2 = i;P0 = tableSLEDi; Delay_1ms(2);/* 名称 : Delay()* 功能 : 实现按键功能,并在LED上显示* 输入 : 无* 输出 : 无*/uchar KEY(void)if(KEY1=0 | KEY2=0 | KEY3=0)Delay(2); /20毫秒软件防抖if(KEY1 = 0) Delay(10);return 1;if(KEY2 = 0)Delay(10);return 2;if(KEY3 = 0)Delay(10);return 3; Delay(10);return 0;return 0;/* 名称 : Main()* 功能 : 实现按键控制LED的显示* 输入 : 无* 输出 : 无*/void Main(void)uchar temp,i=0,j=0,cs=0;while(1)temp = KEY();if(temp = 1)if(SLEDcs != 0)SLEDcs = SLEDcs - 1;/被选数码管的值减1if(temp = 2)if(cs != 7)cs+; /被选数码管右移一位elsecs = 0;if(temp = 3)if(SLEDcs != 9)SLEDcs = SLEDcs + 1; /被选数码管的值加1for(i=0;i8;i+) if(i != cs)P0 = 0;P2 = i; P0 = tableSLEDi;Delay_1ms(1); else /如果是被选择的那个数码管,进入下面控制P0 = 0;P2 = i; P0 = tableSLEDi;Delay_1ms(10); /延时时间长一点,这时,数码管更亮/* 文件名 : 数码管字符显示.c* 描述 : 按下S19按键,数码管上显示的数字加1。* 创建人 : 东流,2012年2月7日* 版本号 : 1.0*/#include#define uchar unsigned char#define uint unsigned intsbit KEY = P32;/* 名称 : Main()* 功能 : 数码管的显示* 输入 : 无* 输出 : 无*/void Main(void)uchar i = 0;P2 = 0xfe;while(1)if(KEY = 1)P0 = 0x76; /H; if(KEY = 0)P0 = 0x38; /L/* 文件名 : 独立按键.c* 描述 : 首先,在点阵的中间显示一个点。 当您按独立按键的下方或者左右的时候,点阵会随之移动。* 创建人 : 东流,2012年2月7日* 版本号 : 1.0*/#include#include#define uchar unsigned char#define uint unsigned intsbit KEY1 = P32; /点左移sbit KEY2 = P33; /点下移sbit KEY3 = P34; /点右移unsigned char tabP0=0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00;unsigned char tabP2=0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE;/* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无*/void Delay_1ms(uint i)/1ms延时uint x,j;for(j=0;ji;j+)for(x=0;x=148;x+);/* 名称 : Delay()* 功能 : 实现按键功能,并在LED上显示* 输入 : 无* 输出 : 无*/uchar KEY(void)if(KEY1=0 | KEY2=0 | KEY3=0)Delay_1ms(20); /20毫秒软件防抖if(KEY1 = 0) Delay_1ms(100);/延时0.5秒再进行下次按键的检测return 1; if(KEY2 = 0)Delay_1ms(100);/延时0.5秒再进行下次按键的检测return 2;if(KEY3 = 0)Delay_1ms(100);/延时0.5秒再进行下次按键的检测return 3; return 0;return 0;/* 名称 : Main()* 功能 : 实现按键控制LED的显示* 输入 : 无* 输出 : 无*/void Main(void)uchar i,j,tempP0;while(1) for(i=0; i8; i+) if(tabP0i != 0)tempP0 = i; /这里的目的是找出现在的点在哪行 switch(KEY() case 1:if(tempP0 != 7) /没有到边tabP0tempP0+1=tabP0tempP0; /把数据传给数组的另一位tabP0tempP0=0x00; /本身的这位清零 break;case 2:j=tabP0tempP0; /把j的值左移一位j = _crol_(j,1); tabP0tempP0=j;break;case 3:if(tempP0 != 0) /没有到边tabP0tempP0-1=tabP0tempP0;/把数据传给数组的另一位tabP0tempP0=0x00;/本身的这位清零break;default:break; for(i=0;i8;i+) P0=0;P2=tabP2i;P0=tabP0i;Delay_1ms(2); /* 文件名 : 点阵显示.c* 描述 : 按下相应的独立按键,会在数码管上显示相应的左右中 按S19显示左 按S18显示中 按S17显示右* 创建人 : 东流,2012年2月7日* 版本号 : 2.0*点阵的开关是J16跳线,用短路帽接上就可以了*/#include #include#define uint unsigned int#define uchar unsigned charsbit KEY1 = P32; sbit KEY2 = P33;sbit KEY3 = P34;unsigned char code tabP2=0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE;/中 的编unsigned char code tabP0ZHONG=0x00,0x3C,0x24,0x24,0xFF,0x24,0x24,0x3C;/“左”的unsigned char code tabP0Z=0x00,0x94,0x94,0xF4,0x9F,0x94,0x24,0x44;/“右”的unsigned char code tabP0Y=0x00,0xF4,0x94,0x94,0x9F,0xF4,0x24,0x44;/* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无*/void Delay_1ms(uchar i)/1ms延时uchar x,j;for(j=0;ji;j+)for(x=0;x=148;x+);/* 名称 : Delay()* 功能 : 实现按键功能,并在LED上显示* 输入 : 无* 输出 : 无*/uchar KEY(void)if(KEY1=0 | KEY2=0 | KEY3=0)Delay_1ms(20); /20毫秒软件防抖if(KEY1 = 0) Delay_1ms(100);/延时0.1秒再进行下次按键的检测return 1; if(KEY2 = 0)Delay_1ms(100);/延时0.1秒再进行下次按键的检测return 2;if(KEY3 = 0)Delay_1ms(100);/延时0.1秒再进行下次按键的检测return 3; return 0;return 0;/* 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无*/void main()int i,temp,flag;while(1)temp = KEY();if(temp != 0) /这里判断是否按键按下,按下后,才改变要显示的值flag = temp; /存标志for(i=0;i8;i+)P0=0;P2=tabP2i;if(flag = 1) P0=tabP0Zi; /显示“左”if(flag = 2)P0=tabP0ZHONGi; /显示 中if(flag = 3)P0=tabP0Yi; /显示“右”Delay_1ms(2);/* 文件名 : 独立按键.c* 描述 : 该程序实现独立按键的判断,按了相应的独立按键后, 会在数码管上显示最先被按下的值,只有按复位按键或者重新开电才消失。* 创建人 : 东流,2012年2月7日* 版本号 : 1.0*/#include#define uchar unsigned char#define uint unsigned intsbit KEY1 = P32; sbit KEY2 = P33;sbit KEY3 = P34;/数码管的段码编码uchar table10 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无*/void Delay_1ms(uint i)uint x,j;for(j=0;ji;j+)for(x=0;x=148;x+);/* 名称 : Delay()* 功能 : 实现按键功能,并在LED上显示* 输入 : 无* 输出 : 无*/uchar KEY(void)if(KEY1=0 | KEY2=0 | KEY3=0)Delay_1ms(20); /20毫秒软件防抖if(KEY1 = 0) Delay_1ms(200);return 1;if(KEY2 = 0)Delay_1ms(200);return 2;if(KEY3 = 0)Delay_1ms(200);return 3; Delay_1ms(200);return 0;/* 名称 : Main()* 功能 : 实现按键控制LED的显示* 输入 : 无* 输出 : 无*/void Main(void)uchar temp,i=0,j=0,cs=0;while(1)temp = KEY(); /判断是否有按键按下if(temp != 0)break; /如果按下,那么退出循环P0 = tabletemp; /显示是哪个按键按下了P2 = 7; while(1); /程序停止/* 文件名 : 步进电机.c* 描述 : 按键的长短键操作。 按了按键后,数码管的值加减1。 如果长按住,会发现数码管快速加减。 按 * 创建人 : 东流,2012年2月8日* 版本号 : 1.0*/#include #define uchar unsigned char#define uint unsigned intsbit KEY1 =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论