1.3.3 源代码分析(1)创建74hc595驱动
创建74hc595.h并输入以下代码。
#ifndef _74hc595_h_#define _74hc595_h_#include sys.hsbit hc595_clk_x = p0^3 ; //x轴595时钟sbit hc595_dat_x = p0^4 ; //x轴595数据sbit hc595_rck_x = p0^5 ; //x轴595锁存sbit db16_x = p0^6 ; //增补x轴脚sbit hc595_clk_y = p0^0 ; //y轴595时钟sbit hc595_dat_y = p0^1 ; //y轴595数据sbit hc595_rck_y = p0^2 ; //y轴595锁存void hc595_x_dat( u16 dat ) ; //74hc595横坐标数据void hc595_y_dat( u16 dat ) ; //74hc595纵坐标数据#endif创建74hc595.c并输入以下代码。
#include 74hc595.h /********************************************************name :hc595_x_datfunction :74hc595横坐标数据paramater : dat:写入的数据return :none********************************************************/void hc595_x_dat( u16 dat ){ u8 i ; for( i=0 ; i<16 ; i++ ) { if( dat&0x8000 ) hc595_dat_x = 1 ; else hc595_dat_x = 0 ; dat <<= 1 ; hc595_clk_x = 0 ; hc595_clk_x = 1 ; } hc595_rck_x = 0 ; hc595_rck_x = 1 ;}/********************************************************name :hc595_y_datfunction :74hc595纵坐标数据paramater : dat:写入的数据return :none********************************************************/void hc595_y_dat( u16 dat ){ u8 i ; for( i=0 ; i<16 ; i++ ) { if( dat&0x8000 ) hc595_dat_y = 1 ; else hc595_dat_y = 0 ; dat <>7 ) ; fftimage[ k ] = fftimage[ k ] - ( ( fftreal[ k+bb ]*sin_tabb[ p ] )>>7 )+( ( fftimage[ k+bb ]*cos_tabb[ p ] )>>7 ) ; //对称幅值计算 fftreal[ k+bb ] = tr -( ( fftreal[ k+bb ]*cos_tabb[ p ] )>>7 )-( ( fftimage[ k+bb ]*sin_tabb[ p ] )>>7 ) ; fftimage[ k+bb ] = ti + ( ( temp*sin_tabb[ p ] )>>7 )-( ( fftimage[ k+bb ]*cos_tabb[ p ] )>>7 ) ; //除以2 fftreal[ k ] >>= 1 ; fftimage[ k ] >>= 1 ; fftreal[ k+bb ] >>= 1 ; fftimage[ k+bb ] >>= 1 ; } } } //转换为余弦形式 for( i=0; i=16 ) result[ timernum ] = 15 ; if( timernum<16 ) { hc595_x_dat( hc_fft_tab_x[ timernum ] ) ; db16_x = 0 ; } else { hc595_x_dat( 0x0000 ) ; db16_x = 1 ; } hc595_y_dat( hc_fft_tab_y[ result[ timernum ] ] ) ; timernum ++ ; if( timernum==17 ) timernum = 0 ;}/********************************************************name :tim0function :定时器0中断服务函数paramater :nonereturn :none********************************************************/void tim0() interrupt 1{ u8 i , t ; th0 = ( 65535-2048 ) / 256 ; tl0 = ( 65535-2048 ) % 256 ; t ++ ; if( t==17 ) { for( i=0 ; i<17 ; i++ ) temp[ i ] = result[ i ] ; t = 0; } fft_disp() ;}
智慧公安大数据研判平台搭建情报分析系统搭建
【收藏】大牛总结的30个PCB布局的细节与心得
谐波的产生、危害及抑制
潮州全面整治线路板等行业重金属污染
日韩运营商5G全球首发,预计明年3月商用
MATLAB学习笔记之傅里叶变换2
单片机是如何从入门到放弃的
一种数字功放PCB实现方案
汽车安全设计开发完整的碰撞防护系统解决方案
技术分享|终端安全防护|ChatGPT会创造出超级恶意软件吗?
LTC6803—4在超级电容器组管理系统中的应用
如何快速成为一名高尔夫高手?你可能需要它
ADAS视频采集和注入解决方案 | CANoe+DYNA4+VX1161.51
电路原理图分享(复位电路 过零检测电路 风机驱动电路)
led芯片基础知识
麒麟820性能如何,能否成为新一代中端手机的芯片守门员
“柔性生产线是刚需!”华辰精密装备携手Fastems打造中国全数字化工厂
SK海力士收购Intel存储业务,标志着韩企在NAND闪存领域的强势地位
霍尔效应传感器的原则是怎样的
美国很多官员正在看好区块链应用于政府内外的潜力