历史上的今天
今天是:2025年03月19日(星期三)
2020年03月19日 | 按键控制51单片机上面硬件的功能
2020-03-19 来源:eefocus
按键一二三对应51单片机上不同的功能
例如跑马灯,蜂鸣器,呼吸灯,中断之类的
#define FSCLK 11059200 //晶振频率为 11.0592MHz
#include #include #include #define LED_PORT P0 sbit BEEP=P1^4; unsigned int n = 0; unsigned int t = 0; unsigned char xx = 127; unsigned char p; unsigned char m; #define uchar unsigned char #define uint unsigned int unsigned char code music_tab[] = { 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0xff, //ff 休止符 0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,0}; void int0() interrupt 1 { TH0 = (65536 - 10000) / 256;//0xd8; TL0 = (65536 - 10000) % 256;//0xef; n--;} void Delay(uint time) { uint i; for(i = time;i> 0;i --); } sbit LED0 = P0^0; sbit LED7 = P0^7; sbit LED1 = P0^1; sbit LED6 = P0^6; sbit LED2 = P0^2; sbit LED5 = P0^5; sbit LED3 = P0^3; sbit LED4 = P0^4; uint flag; uint time; uint temp; uint i; void Delay_ms(uint time) { uint i,j; for(i = 0;i < time;i ++) for(j = 0;j < 930;j ++); } void main() { uchar key; while(1) { key = Key_Scan(); //在while(1)里面不断循环执行按键扫描程序Key_Scan(),Key_Scan()不断将按键的返回值赋给变量key if(key == 1) //key!=0说明有按键被按下 { TMOD = 0x01; //配置定时器 0 工作在 16 位定时器模式 //其中 GATE=0,C/T TH0 = (65536-FSCLK/12/20)/256; TL0 = (65536-FSCLK/12/20)%256; //20Hz 计数频率,溢出一次需要 50ms ET0 = 1; //允许定时器中断 EA = 1; //打开总中断 LED1 = 0; LED6 = 0; LED2 = 1; LED5 = 1; LED3 = 0; LED4 = 0; TR0 = 1; //打开定时器,开始计数 while(1) { if(flag != 0) { flag = 0; LED1 = !LED1; LED6 = !LED6; LED2 = !LED2; LED5 = !LED5; LED3 = !LED3; LED4 = !LED4; } } } if(key == 2) while(1) { for(temp = 0;temp <= 350;temp ++) { for(i=0;i<10;i++) { LED0 = 0; LED7 = 1; Delay(temp); LED0 = 1; LED7 = 0; Delay(350-temp); } } for(temp = 350;temp > 0;temp--) { for(i=0;i<10;i++) { LED0 = 0; LED7 = 1; Delay(temp); LED0 = 1; LED7 = 0; Delay(350-temp); } } for(temp = 0;temp <= 350;temp ++) { for(i=0;i<10;i++) { LED7 = 1; LED0 = 0; Delay(temp); LED7 = 0; LED0 = 1; Delay(350-temp); } } for(temp = 350;temp > 0;temp--) { for(i=0;i<10;i++) { LED7 = 1; LED0 = 0; Delay(temp); LED7 = 0; LED0 = 1; Delay(350-temp); } } } if(key == 3) { TMOD = 0x01; //配置定时器 0 工作在 16 位定时器模式 //其中 GATE=0,C/T TH0 = (65536-FSCLK/12/20)/256; TL0 = (65536-FSCLK/12/20)%256; //20Hz 计数频率,溢出一次需要 50ms ET0 = 1; //允许定时器中断 EA = 1; //打开总中断 LED1 = 0; LED6 = 0; LED2 = 1; LED5 = 1; LED3 = 0; LED4 = 0; TR0 = 1;while(1) { if(flag != 0) { flag = 0; LED1 = !LED1; LED6 = !LED6; LED2 = !LED2; LED5 = !LED5; LED3 = !LED3; LED4 = !LED4; for(temp = 0;temp <= 300;temp ++) { for(i=0;i<10;i++) { LED0 = 0; LED7 = 1; Delay(temp); LED0 = 1; LED7 = 0; Delay(300-temp); } } for(temp = 300;temp > 0;temp--) { for(i=0;i<10;i++) { LED0 = 0; LED7 = 1; Delay(temp); LED0 = 1; LED7 = 0; Delay(300-temp); } } for(temp = 0;temp <= 300;temp ++) { for(i=0;i<10;i++) { LED7 = 1; LED0 = 0; Delay(temp); LED7 = 0; LED0 = 1; Delay(300-temp); } } for(temp = 300;temp > 0;temp--) { for(i=0;i<10;i++) { LED7 = 1; LED0 = 0; Delay(temp); LED7 = 0; LED0 = 1; Delay(300-temp); } } } } } if(key == 4) { uchar temp = 0xFE,i = 0,flag = 0; while(1) { if(flag == 0) { LED_PORT = temp; Delay_ms(200);//延时0.5s //移位函数_crol_()包含在头文件intrins.h里面,在#include temp=_crol_(temp,4);//循环左移一位(例如:若调用函数前temp:0000 0001 ,调用函数后temp:0000 0010) i++; if(i == 7)flag = 1; } else { LED_PORT = temp; Delay_ms(200);//延时0.5s temp=_cror_(temp,3);//循环左移一位(例如:若调用函数前temp:0000 0001 ,调用函数后temp:1000 0000) i--; if(i == 0)flag = 0; } } } if(key==5) { unsigned char p, m, i; TMOD &= 0xf0; TMOD |= 0x01; TH0 = (65536 - 10000) / 256;//0xd8; TL0 = (65536 - 10000) % 256;//0xef; TR0 = 1; IE = 0x82; while(1) { i = 0; while(1) { p = music_tab[i]; if (p == 0) break; if (p == 0xff) { i++; n = 10; while(n); // delayms(100); } m = music_tab[i++]; n = music_tab[i++]; while(n) {BEEP = ~BEEP; Delay(m);} } n = 100; while(n); // delayms(1000); } } if(key==6) {} } } void time0() interrupt 1 //中断服务程序 { TH0 = (65536-FSCLK/12/20)/256; TL0 = (65536-FSCLK/12/20)%256; time ++; if(time == 25) //每 50ms 进入一次中断,t = 20*50 ms = 1 s。 //实现 1 秒定时 { time = 0; flag = 1; } }
史海拾趣
|
PTT/POC手机对讲软件比较,常见PTT/POC手机对讲软件分析和评测 PTT/POC手机对讲软件比较,常见PTT/POC手机对讲软件分析和评测 PTT手机对讲软件是3G时代一个新的软件财富的传奇,到底什么是PTT手机对讲软件呢?按照百度百科对PTT的解释是这样的, PTT一键通(Push-to-Talk)功能是利用软件技术实现的一种全新的 ...… 查看全部问答> |
|
1,使用MICROLIB时,全局变量没有初始化;2,不使用MICROLIB时,如果不重定义_sys_exit()可以看到全局变量被正确初始化了,但在BKPT处停止 3,不使用MICROLIB时,重定义_sys_exit(),变量又没初始化 MDK咋这难用呢,问题出在哪?… 查看全部问答> |
|
哪位大侠可以给我完整深入的说一下TMS320F2812,我的毕业设计要用到 哪位大侠可以给我完整深入的说一下TMS320F2812,我的毕业设计做的就是DSP,因为没学过,所以现在用就很吃力。 希望那个大哥大姐帮我一下,越详细越好,一些硬件结构,外部电路,寄存器设置等等,谢谢了。… 查看全部问答> |




