⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 signalgen.c

📁 51单片机C语言应用程序设计实例精讲.rar
💻 C
字号:
/*****************************************/
/* Copyright (c) 2005, 通信工程学院      */
/* All rights reserved.                  */
/* 作    者:戴 佳		        		 */
/*****************************************/

#include "SignalGen.h"

/* 用于键消抖的延时函数 */
void delay()
{
	uchar i;
	for (i=400;i>0;i--);
}

/* 键扫描函数 */
uchar keyscan(void)
{
	uchar scancode,tmpcode;
	P1 = 0xf0;			 					// 发全0行扫描码
	if ((P1&0xf0)!=0xf0)					// 若有键按下
	{
		delay();							// 延时去抖动
		if ((P1&0xf0)!=0xf0)				// 延时后再判断一次,去除抖动影响
		{
			scancode = 0xfe;
			while((scancode&0x10)!=0)		// 逐行扫描
			{
				P1 = scancode;				// 输出行扫描码
				if ((P1&0xf0)!=0xf0)		// 本行有键按下
				{
					tmpcode = (P1&0xf0)|0x0f;

					/* 返回特征字节码,为1的位即对应于行和列 */
					return((~scancode)+(~tmpcode));
				}
				else scancode = (scancode<<1)|0x01;		// 行扫描码左移一位
			}
		}
	}
	return(0);								// 无键按下,返回值为0 	
}

/* 主程序 */
void main()
{ 
	uchar key;

  	while(1)
    {
		key = keyscan();			// 调用键盘扫描函数

		delay();

		switch(key)
   		{
      		case 0x11:				// 第1行第1列,选择正弦波输出
				A0 = 0;				
				A1 = 1;
				break;
			case 0x21:				// 第1行第2列,选择矩形波输出
				A0 = 0;				
				A1 = 0;
				break;			
			case 0x41:				// 第1行第3列,选择三角波输出
				A0 = 1;				
				A1 = 0;
				break;     		
			default:break;
		 }
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -