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

📄 vidu6-2.c

📁 code c&#7911 a dsp 30f4012 vi&#7871 t cho giao ti&#7871 p LCD
💻 C
字号:
/*******************************************************************************
;	Vidu6-2.c la chuong trinh viet bang C30 de chay tren mot dsPIC			   *
;	Chuong trinh thuc hien viec sau: Xuat chuoi 'Hello' ra LED ma tran		   *
;*******************************************************************************

;	Tac gia				: Nguyen Quang Nam									   *

;	Don vi				: PIC Viet Nam										   *

;	Ten tap tin			: Vidu6-2.c											   *

;	Ngay				: 12/08/2007										   *

;	Phien ban			: 0.01												   *

;	Nhung tap tin can thiet khac: p30F4012.gld, p30f4012.h					   *

;	Cong cu duoc dung:	MPLAB 7.60											   *
;						C30 3.01 SE											   *
;						ASM30 3.00											   *
;						LNK30 3.00											   *
------------------------------------------------------------------------------*/
#include	<p30fxxxx.h>

//Cac tu cau hinh
	_FOSC(CSW_FSCM_OFF & FRC_PLL4);		//fcy = 8 MHz
	_FWDT(WDT_OFF);
	_FBORPOR(PBOR_OFF & MCLR_EN & PWMxL_ACT_HI & PWMxH_ACT_HI);
	_FGS(CODE_PROT_OFF);

//Thuoc tinh cua trinh phuc vu ngat (tuong thich voi C30 v3.00 tro di)
#define _ISR_PSV __attribute__((interrupt, auto_psv))

//Cac chan vao/ra
#define	SH_CK	LATEbits.LATE0		//chan 11 la clock de dich du lieu
#define	ST_CK	LATEbits.LATE1		//chan 12 la clock de chot du lieu
#define	DS		LATEbits.LATE2		//chan 14 la chan du lieu

//Mot so macro trong chuong trinh
#define	StrobeSH()	SH_CK = 1; SH_CK = 0;
#define	StrobeST()	ST_CK = 1; ST_CK = 0;

//Bitmap de hien thi (nx8), quet cot
const unsigned char __attribute__ ((space(psv), address (0x0400))) 

Hello_bmp[70] = {
   0,  0,  0,  0,  0,  0,  0,  0,255,  8,  8,  8,  8,255,  0,120,
 148,148,148, 88,  0,255,  0,255,  0,120,132,132,132,120,  0,  0,
   0,  0, 12, 48,192, 56,  4, 56,192, 48, 12,  0,120,132,132,132,
 120,  0,252,  8,  4,  0,255,  0,120,132,132, 72,255,  0,191,  0,
   0,  0,  0,  0,  0,  0
};

//Cac bien toan cuc
unsigned char cur_col;	//Cot hien thoi cua bitmap
unsigned char col_idx;	//Chi so cot hien thoi trong ma tran
unsigned char tmp1, tmp2;		//Cac bien tam thoi
volatile unsigned char flag;	//Co cap nhat hien thi
unsigned char speed;	//Toc do chay chu (= 1 la toc do nhanh nhat)

//Chuong trinh con khoi tao cac cong I/O
void Init_PORTs(void) {
	LATE = 0x0000;
	TRISE = 0xFFF8;		//RE0..RE2 la ngo ra
}

//Chuong trinh con khoi tao Timer 1
void Init_TMR1(void) {
	TMR1 = 0;			//Xoa thanh ghi dem cua Timer 1
	PR1 = 0x07D0;		//Ngat moi 2 ms, xem prescale khi thiet lap T1CON
	_T1IF = 0;			//Xoa co ngat cua TMR1
	_T1IE = 1;			//Cho phep ngat TMR1
	flag = 0;			//Xoa co cap nhat hien thi
	T1CON = 0x8010;		//Dung fcy, prescale = 1:8, bat Timer 1
}

//Chuong trinh chinh
int main(void) {
	unsigned char k;
	Init_PORTs();
	Init_TMR1();
	_PSV=1;
	PSVPAG = __builtin_psvpage(Hello_bmp);
	cur_col = col_idx = 0;
	speed = 75;		//Khoang 6.6 dich chuyen/giay
	while (1 == 1) {
		if (flag == 1) {
			flag = 0;
			//Quet cot hien thoi
			tmp2 = 1 << (col_idx);
			//Lay cot bitmap
			tmp1 = Hello_bmp[cur_col+col_idx];
			//Dich du lieu cot ra truoc
			for (k=0; k < 8; k++) {
				DS = tmp2;
				StrobeSH();
				tmp2 >>= 1;
			}
			//Roi den du lieu hang
			for (k=0; k < 8; k++) {
				DS = tmp1;
				StrobeSH();
				tmp1 >>= 1;
			}
			//Chot cac du lieu lai
			StrobeST();
			col_idx++;		//Chuyen chi so sang cot ke tiep
			col_idx &= 0x07;
			speed--;		//Giam so dem dung cho dich chuyen
			//Neu den luc can dich chuyen thi cap nhat so dem va cot bitmap
			if (speed == 0) {
				cur_col++;
				if (cur_col > 62) cur_col = 0;
				speed = 75;
			}
		}
	}
	return 0;
}

//
void _ISR_PSV _T1Interrupt(void) {
	flag = 1;			//Den luc cap nhat hien thi
	_T1IF = 0;			//Xoa co ngat
}

⌨️ 快捷键说明

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