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

📄 disp.c

📁 winAVR编写的MEGA16内部EEPROM读写程序
💻 C
字号:
#include <inttypes.h>
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
//#include "type.h"
#include "disp.h"
/*
 * 74HC138  INPUT  A B C : PA5  PA6  PA7
 * Data PORT:  74HC595的ST对应NCS :PA2 
 *                      SH对应SCK :PA3
 *                      DS对应MOSI:PA4
 *
*/ 
#define DispSel(x)   (PORTA=((PORTA&0x1f)|(x<<5)))

#define NCS_PIN  PA2
#define NCS_DDR  DDRA
#define NCS_PORT  PORTA

#define SCK_PIN PA3
#define SCK_DDR DDRA
#define SCK_PORT PORTA

#define MOSI_PIN PA4
#define MOSI_DDR DDRA
#define MOSI_PORT PORTA


#define NCS_SET  (NCS_PORT|=(1<<NCS_PIN))
#define NCS_CLR  (NCS_PORT&=~(1<<NCS_PIN))

#define SCK_SET  (SCK_PORT|=(1<<SCK_PIN))
#define SCK_CLR  (SCK_PORT&=~(1<<SCK_PIN))

#define MOSI_SET  (MOSI_PORT|=(1<<MOSI_PIN))
#define MOSI_CLR  (MOSI_PORT&=~(1<<MOSI_PIN))

//四位共阳数码管码
//PB 0 1 2 3 4 5 6 7
//   a b c d e f g h
//                    0,   1,   2,   3,   4,   5,   6,   7,   8,   9,    a,   b,   c,   d,   e,   f,   .,  off
const uint8_t NumTab[19]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xFF};       
//uint8_t DispBuf[8];

/*
#define DispPortInit()  do{\
NCS_DDR|=(1<<NCS_PIN);\
SCK_DDR|=(1<<SCK_PIN);\
MOSI_DDR|=(1<<MOSI_PIN);\
DispData(0xff);\
DDRA|=(1<<PA5)|(1<<PA6)|(1<<PA7);\
}while(0)
*/
void DispData(uint8_t x)
{
	uint8_t i;
	NCS_CLR;
	SCK_CLR;
	for(i=0;i<8;i++)
	{
		if(x&0x80)            //一位一位数据通过MOSI(PA4)输出,先输出高位
		MOSI_SET;
		else MOSI_CLR;
		SCK_SET;              //上升沿有效,SCK对应74HC595的ST_CP,逐位移位输入,但Qn引脚不改变
		SCK_CLR;
		x<<=1;
	}
	NCS_SET;                //上升沿有效,NSC对应74HC595的SH_CP,当8位数据均移入后,才改变Qn的引脚电平,并行输出8位数据
}

void DispPortInit(void)
{
	NCS_DDR|=(1<<NCS_PIN);
	SCK_DDR|=(1<<SCK_PIN);
	MOSI_DDR|=(1<<MOSI_PIN);
	DispData(NumTab[17]);
	DDRA|=(1<<PA5)|(1<<PA6)|(1<<PA7);
}

void Disp(uint8_t  *p)
{
	uint8_t i;
	for(i=0;i<8;i++)
	{
		DispSel(i);
		if(i==4)_delay_ms(1);
		DispData(NumTab[*p++]);
		_delay_ms(1);
		DispData(NumTab[17]);//off the disp
	}
}






⌨️ 快捷键说明

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