每一次想顯示單片機當前的參數,麻煩就作一個RS485+數碼管的顯示板
新唐003+TM1650驅動方案;空板:
02.jpg (807.5 KB, 下載次數: 78)
下載附件
2020-9-11 21:00 上傳
焊好的板;
03.jpg (715.82 KB, 下載次數: 75)
下載附件
2020-9-11 21:00 上傳
剛上電的:
04.jpg (567.2 KB, 下載次數: 75)
下載附件
2020-9-11 21:00 上傳
現在解碼紅外的鍵值,賊好用,當然可以顯示你要顯示的數據;
01.jpg (771.3 KB, 下載次數: 67)
下載附件
2020-9-11 21:00 上傳
附一個原廠的1650的驅動代碼:
/*****************************************************************************
*版權信息:深圳天微電子有限公司
*文 件 名:TM1650-V1.0
*當前版本:V1.0
*MCU 型號:STC12C5608AD
*開發環境:Keil uVision4
*晶震頻率:11.0592MHZ
*完成日期:2013-07-29
*程序功能:1.上電8段4位共陰數碼管顯示1、2、3、4.
2.按下K11與DIG1,K12與DIG2 ,K13與DIG3之間的按鍵,數碼管第一位分別顯示5、6、7。
*免責聲明:1.此程序為TM1650驅動LED數碼管演示程序,僅作參考之用。
2.如有直接使用本例程程序造成經濟損失的,本公司不承擔任何責任
********************************************************************************/
#include<reg52.h> //MCU頭文件
#include<intrins.h> //包含nop指令頭文件
#define uint unsigned int //數據類型宏定義
#define uchar unsigned char //數據類型宏定義
#define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定義
/********************定義控制端口**********************/
sbit SCL=P2^1; //時鐘線
sbit SDA=P2^0; //數據線
uchar keya; //定義讀出按鍵返回值
/*************1ms延時*晶振11.0592M********************/
void delay(uint n)
{
uint i;
while(n--)
for(i=0;i<550;i++);
}
/**************共陰數碼管顯示0-F**********************/
uchar display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //共陰極字段碼
/************ START信號*******************************/
void TM1650_START()
{
SCL=1;
SDA=1;
nop;
SDA=0;
nop;
SCL=0;
}
/******************** STOP信號************************/
void TM1650_STOP()
{
SDA=0;
nop;
SCL=1;
nop;
SDA=1;
nop;
SCL=0;
SDA=0;
}
/****************寫1個字節給TM1650********************/
void write_8bit( uchar dat)
{
uchar i;
SCL=0;
for(i=0;i<8;i++)
{
if(dat&0x80)
{
SDA=1;
nop;
nop;
SCL=1;
nop;
nop;
nop;
nop;
nop;
SCL=0;
}
else
{
SDA=0;
nop;
nop;
SCL=1;
nop;
nop;
nop;
nop;
nop;
SCL=0;
}
dat<<=1;
}
SDA=1; //ACK信號
nop;
nop;
nop;
nop;
SCL=1;
nop;
nop;
nop;
nop;
nop;
SCL=0;
nop;
nop;
}
/**********************讀8bit**************************/
uchar read_8bit()
{
uchar dat,i;
SDA=1;
dat=0;
for(i=0;i<8;i++)
{
SCL=1; //時鐘上沿
nop;
nop;
nop;
dat<<=1;
if(SDA)
dat++;
SCL=0;
nop;
nop;
nop;
nop;
}
SDA=0; //ACK信號
nop;
nop;
nop;
SCL=1;
nop;
nop;
nop;
nop;
SCL=0;
nop;
return dat ;
}
/*******************讀按鍵命令************************/
uchar TM1650_read()
{
uchar key;
TM1650_START();
write_8bit(0x49);//讀按鍵指令
key=read_8bit();
TM1650_STOP();
return key;
}
/*****************發送命令信號***********************/
void TM1650_send(uchar date1,uchar date2)
{
TM1650_START();
write_8bit(date1);
write_8bit(date2);
TM1650_STOP();
}
/*****************顯示函數***********************/
void disp()
{
TM1650_send(0x48,0x01); // 開啟顯示模式:8段顯示,1級亮度
TM1650_send(0X68,display[1]); //GID1
TM1650_send(0X6A,display[2]); //GID2
TM1650_send(0X6C,display[3]); //GID3
TM1650_send(0X6E,display[4]); //GID4
}
/**************主函數**************************/
void main(void)
{
disp(); //上電顯示1、2、3、4
delay(1);
while(1)
{
keya=TM1650_read();
delay(50);
if (keya!=0)
{
switch(keya) //控制數碼管顯示數字
{
case 0x44:TM1650_send(0X68,display[5]); break; //K11與DIG1
case 0x4D:TM1650_send(0X68,display[6]); break; //K12與DIG2
case 0x56:TM1650_send(0X68,display[7]); break; //K13與DIG3
default: break;
}
}
}
}
tm1650(原例).rar
(1.5 KB, 下載次數: 17)
2020-9-11 21:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|