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

📄 sj.c

📁 在三星44B0上基于LED数码管的显示个位十位
💻 C
字号:
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/ioctl.h>#include <pthread.h>#include <fcntl.h>#include "zlg7289.h"#include "s3c44b0-spi.h"#include <string.h>#include"time.h"#include "hardware.h"//#define TC 1024#define TC 66000000/16/2/1000#define SPI_DEV		"/dev/spi/0"static int spi_fd = -1;#define Zlg7289_Reset()	do{write_Zlg7289(ZLG7289_CMD_RST);Delay(20);}while(0)#define ADCCON_FLAG		0x40#define ADCCON_SLEEP		0x20pthread_mutex_t lock;int x;static int stop=0;int pwminit(){	TCFG0 |=0x10;	TCFG1 |=0x0;	TCNTB0=TC;	TCMPB0=TC/2;	TCON |=0x1<<1;	TCON &=(~0x1<<1);	TCON |=0x19;	return 0;}void setpwm(int n){	TCMPB0=TC/1024*(n-512)+TC/2;}void closepwm(){	while(TCNTO0>TCMPB0);	TCON &= (~0x19) ;	}void init_ADdevice(void){	ADCPSR=20;	ADCCON=ADCCON_SLEEP;}int GetADresult(int i){	int j;	ADCCON=i<<2|0x1;	while(ADCCON&0x1);	for(j=0;j<100;j++);	while(!(ADCCON&0x40));	return ADCDAT;}void* comMonitor(void* data){	getchar();	stop=1;	closepwm();	close(spi_fd);	exit(0);	return NULL;}void* com0(void* data){	int i=0;	while(1)	{	pthread_mutex_lock(&lock);	x=(int)GetADresult(1);		pthread_mutex_unlock(&lock);	for(i=0;i<100;i++);	}	return NULL;}static void Delay(int t)   //LED{	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 str){	int i;	char buffer[20];	for(i=0;i<8 && str!=0 ;i++){		buffer[i*2]=(ZLG7289_CMD_DATA1|i); 		buffer[i*2+1]=(str%10);		str/=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(void){	int i,m=0;	pthread_t b,a0;	void * retval;	pwminit();		init_ADdevice();	usleep(1);	pthread_create(&b, NULL,comMonitor,0);	pthread_create(&a0, NULL,com0,0);	if((spi_fd=open(SPI_DEV, O_NONBLOCK))<0){		printf("Error opening %s spi device\n", SPI_DEV);		return 1;	}	Zlg7289_Reset();	while(stop == 0)	{		setpwm(x);				if((m-x)>2||(x-m)>2)		{			m=x;			Zlg7289_showStr(x);		}	}			pthread_join(b, &retval);	pthread_join(a0, &retval);	return 0;}

⌨️ 快捷键说明

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