|
原本想做个别的,因为中途被打断了,这里记录一下:程序是18B20温度传感器+TM1620,我使用的是共阴极数码管。
#include "tm1260.h"
//---重定义关键词---//
void sendDataToTM1620(unsigned char sdata){
//在时钟的上升沿进行移位写入,低位先传
unsigned char a;
stb = 0;
_nop_();
_nop_();
for(a=0;a<8;a++){
if(sdata&0x01)
din = 1;
else
din = 0;
sdata >>= 1;
clk = 0;
_nop_();
_nop_();
clk = 1;
}
}
void initialTM1620(int temp){
unsigned char i,TempNum[4]={0};
unsigned char code TubYinNum[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };//0-9 //共阴极
unsigned char code TubYanNum[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };//0-9
TempNum[0] = TubYinNum[temp/100];//温度十位
TempNum[1] = TubYinNum[temp%100/10];//温度个位
TempNum[1] = TempNum[1]|0x80;//加上小数点
TempNum[2] = TubYinNum[temp%10];//温度小数点
stb = 1;
din = 1;
clk = 1;
_nop_();
stb = 0;
sendDataToTM1620(0x02);//显示模式设置,设置为6个GRID,8个SEG
stb = 1;
_nop_();
stb = 0;
sendDataToTM1620(setAddrMode);//固定地址 44
// sendDataToTM1620(0x0C);//显示寄存器的c0H单元开始
//地址数据清零
for(i=0;i<3;i++){//因为控制的是3位数码管,所以这里循环只有3
stb = 1;
_nop_();
stb = 0;
_nop_();
sendDataToTM1620(0xc0+i*2);//选择要写入的地址
sendDataToTM1620(TempNum[ i]);//写入数值
}
//设置亮度和开关
stb = 1;
_nop_();
stb = 0;
_nop_();
//0x88是最暗的,8F是最亮的这期间的数可以任意选
//当时还带着蓝牙模块,大体测了下亮度设为88的情况下电流好像是120ma左右(图片是80的亮度),8F大约是180ma左右。
sendDataToTM1620(0x88);//显示控制参数,点亮数码屏幕,亮度可以通过改变低三位调节
stb = 1;
_nop_();
}
void OffTM1620()
{//息屏函数
stb = 1;
_nop_();
stb = 0;
_nop_();
sendDataToTM1620(0x80);//关闭显示
stb = 1;
_nop_();
} |
评分
-
查看全部评分
|