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

📄 led.c~

📁 三星44b0上AD控制电机代码 测试通过
💻 C~
字号:
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/ioctl.h>#include <pthread.h>#include "hardware.h"#include <fcntl.h>#include <string.h>#include "zlg7289.h"#include "s3c44b0-spi.h"#define KT0 16#define KT1 4#define T0 254#define T1 16#define M 66000000#define ADCCON_FLAG		0x40#define ADCCON_SLEEP		0x20#define ADCCON_ADIN0		(0x0<<2)#define ADCCON_ADIN1		(0x1<<2)#define ADCCON_ADIN2		(0x2<<2)#define ADCCON_ADIN3		(0x3<<2)#define ADCCON_ADIN4		(0x4<<2)#define ADCCON_ADIN5		(0x5<<2)#define ADCCON_ADIN6		(0x6<<2)#define ADCCON_ADIN7		(0x7<<2)#define ADCCON_READ_START	0x2#define ADCCON_ENABLE_START	0x1#define SPI_DEV		"/dev/spi/0"static int spi_fd = -1;#define Zlg7289_Reset()	do{write_Zlg7289(ZLG7289_CMD_RST);Delay(20);}while(0)void init_ADdevice(void){	ADCPSR=20;	ADCCON=ADCCON_SLEEP;}int GetADresult(int channel){	int i=0;	ADCCON=(channel<<2)|ADCCON_ENABLE_START;	while((ADCCON) &1);	for(;i<100;i++);	while(!( (ADCCON) & ADCCON_FLAG));	return ADCDAT;}static int stop=0;void* comMonitor(void* data){	getchar();	stop=1;	return NULL;}void chushi0(){	TCFG0  |= KT0;	TCFG1 |= 1;	TCNTB0 = M/KT0/KT1/1000;	TCMPB0 = M/KT0/KT1/1000/2;	TCON |= 0x2;	TCON &= ~0x2;	TCON |= 0x19;	}void setpwm(int n){//	printf("123123123123\n");	TCMPB0 = M/KT0/KT1/1000/2+n;}static void Delay(int t){	int i;	for(;t>0;t--)		for(i=0;i<400;i++);}static void write_Zlg7289(int cmd){	spi_rw data;	data.buffer=(char*)&cmd;	data.size=1;        if(ioctl(spi_fd, SPI_IOCTRL_WFORZLG7289, &data)!=0){            printf("Error IOCTRL, please check your spi driver in kernel!\n");			close(spi_fd);                                                                  exit(1);        }}static void mwrite_Zlg7289(char* buffer, int size){	spi_rw data;	data.buffer=buffer;	data.size=size;        if(ioctl(spi_fd, SPI_IOCTRL_WFORZLG7289, &data)!=0){                printf("Error IOCTRL, please check your spi driver in kernel!\n");                close(spi_fd);                exit(1);        }}static void Zlg7289_showStr(int g){	int i;	//unsigned int showdata;	char buffer[20];		if(g>100000000)	//the string length must below 8.		g=0;	//sscanf(g, "%x", &showdata);	//printf("showdata=%x\n",showdata);	for(i=0;i<8 && g!=0 ;i++){		buffer[i*2]=(ZLG7289_CMD_DATA1|i); //		buffer[i*2+1]=(g%10);		g/=10;	}	for(;i<8;i++){		buffer[i*2]=(ZLG7289_CMD_DATA0|i);		buffer[i*2+1]=0xf;	//don't show any word	}		mwrite_Zlg7289(buffer, 16);}int main(){	int j;	float v;	int value;	int d,n;	pthread_t th_com;	void * retval;	init_ADdevice();	usleep(1);	chushi0();  	if((spi_fd=open(SPI_DEV, O_NONBLOCK))<0){		printf("Error opening %s spi device\n", SPI_DEV);		return 1;	}                                                                              	pthread_create(&th_com, NULL, comMonitor, 0);	printf("\nPress Enter key exit!\n");	while( stop==0 ){				d=GetADresult(0);		n=(d-512)*66000000/16/4/1000/1024;		printf("%d\n",n);		setpwm(n);		usleep(10);			Zlg7289_Reset();		Zlg7289_showStr(d);	}	pthread_join(th_com, &retval);	close(spi_fd);    	return 0;	}

⌨️ 快捷键说明

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