历史上的今天
今天是:2024年10月24日(星期四)
2019年10月24日 | PIC单片机驱动TM1616源程序
2019-10-24 来源:51hei
/*本程序适用于没有SIP功能的单片机添加SIP发送功能*/
#include __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define clk P10 //定义时钟管脚 #define clk RC3 //定义时钟管脚 #define dio RC5 //定义数据管脚 #define stb RC2 //定义片选管脚 //#define nop _nop_(); #define uchar unsigned char #define uint unsigned int const char TABLE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71,0xE0,0x5C,0x3E,0x78, 0x37, 0x76, 0x38, 0x01, 0x41, 0x49,0x00}; unsigned char store_bank[4]; //建立数据列队3 //初始化函数体 void init() { ADCON1=0X07; TRISA=0X30; TRISB=0X03; TRISC=0X10; TRISD=0X00; PORTD=0XFF; // SSPSTAT=0X80; // SSPCON=0X31; INTCON=0X00; PIR1=0X00; stb=0; } //---------------------TM1616发送1字节数据子程序------------------------------------------ void tm1616write(uchar wr_date) { uchar i; stb =0; //片选管脚 NOP(); NOP(); for(i=0;i<8;i++)//循环运行8次 { clk=0; //时钟管脚 NOP(); NOP(); if(wr_date&0x01!=0)//查看数据的最小位是否为0 { dio=1; //数据管脚 } else { dio=0;//数据管脚 } NOP(); NOP(); clk=1; //时钟管脚 NOP(); wr_date=wr_date>>1;//数据左移1位 } } //-------------------------TM1616采用固定地址显示数据子程序--------------------------------- void tm1616show(uchar data1,uchar data2,uchar data3,uchar data4) { uchar j; stb = 1; //片选管脚 clk = 1; //时钟管脚 dio = 1; //数据管脚 tm1616write(0x00); //显示模式设置,设置为4个GRID,7个SEG stb=1; //片选管脚 //显示模式设置完毕,STB置1 tm1616write(0x44); //数据命令设置,设置普通模式、固定地址、写数据到显示寄存器 stb=1; // 片选管脚//数据命令设置完毕,STB置1 tm1616write(0xC0); //设置显示地址1 tm1616write(data1);//传输显示数据1 stb=1; //片选管脚 //显示数据1发送完毕STB置1 tm1616write(0xC2);//设置显示地址1 tm1616write(data2);//传输显示数据1 stb=1; //片选管脚 //显示数据1发送完毕STB置1 tm1616write(0xC4); //设置显示地址1 tm1616write(data3);//传输显示数据1 stb=1; //片选管脚 //显示数据1发送完毕STB置1 tm1616write(0xC6); //设置显示地址2 tm1616write(data4);//传输显示数据1 stb=1; //片选管脚 //显示数据1发送完毕STB置1 tm1616write(0x8F); //控制命令设置,设置显示开、显示最亮 stb=1; //片选管脚 //显示数据发送完毕STB置1 } //T毫秒延时程序''''''''''''''''''''''''''''''''''''''''''' void DELAY(unsigned int t ) //延时程序 {unsigned int y; while(t) { for(y=98;y--;); //延时 t--; }} //运算------------------------------------ void count(uint y) {uchar ca; ca=y/0x64/0xa; //求千位数/100=10数据/10等于一个千位数字 余数扔掉 store_bank[3]=TABLE[ca]; ca=(y/0x64)%0xa; //千位数/100留下百位以下数据 store_bank[2]=TABLE[ca]; ca=(y%0x64)/0xa; //求显示的个位 store_bank[1]=TABLE[ca]; ca=(y%0x64)%0xa; //求显示的个位 store_bank[0]=TABLE[ca]; } //TM1616主函数体--------------------------------------------- void main(void) { uint k; init(); while(1) { for(k=0;k<9999;k++) {count(k); tm1616show(store_bank[3],store_bank[2],store_bank[1],store_bank[0]); //带数据 DELAY(50); }
史海拾趣
|
本人现在有一个“英创EM9260”套件,想在上面做一个简单的串口程序,实现给一个电度表发送字符串并接收其返回的字符串,然后通过一个lcd屏幕显示返回的字符串。我把套件提供的一个串口通信的示例程序做了简单的修改,但是只能实现发送数据,回收的 ...… 查看全部问答> |
|
有没有使用过OMAP3530的兄弟,有个问题请教下: 在CCS下写的基于DSP/BIOS的程序,能不能访问McBSP? OMAP的技术支持说,OMAP3530是ARM做主控,DSP做运算,只有ARM能控制外设。 但是我在网上查的一些资料,却有人说可以直接访问寄存器 ...… 查看全部问答> |
|
這是用於燈具產品內的發光二極體光源的評估指南的第一版,適用於發光二極體作為光源的元件,例如發光二極體模組,發光二極體陣列、電源與控制電路。也涵蓋了由最終產品製造商製作的發光二極體光源,它可以是產品的一部分或 ...… 查看全部问答> |
|
LM3S8962自带工程boot_demo_eth经常出现烧录失败的问题。IAR编译的。大家碰到过吗? LM3S8962自带工程boot_demo_eth经常出现烧录失败的问题。其它工程很少出现。IAR编译的。大家碰到过吗? 用LM Flash Programmer 下载是成功的,没有任何出错的信息。但是下载完成后,就是没有办法跑起来。 用IAR可以调试,但是调 ...… 查看全部问答> |




