📄 led.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 + -