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

📄 signalgen.c

📁 利用单片机和信号发生芯片的组合完成信号发生功能。
💻 C
字号:

#include <reg52.h>                // 引用标准库的头文件

#define uchar unsigned char 

uchar key;                        // 按键值 

sbit A0 = P2^0;                    // MAX038的波形选择位A0
sbit A1 = P2^1;                    // MAX038的波形选择位A1

void delay();
uchar keyscan();

/* 用于键消抖的延时函数 */
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 + -