久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3407|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

誰能給幫忙把這個(gè)程序分解下謝謝。數(shù)碼管實(shí)在搞不亮

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


#include "p18cxxx.h"              //頭文件
#include "delays.h"
#include "SEG.h"
#define uchar unsigned char
#define uint unsigned int
#define  uch unsigned char                     //給unsigned char起別名 uch
# define DQ  LATAbits.LATA0                              //定義18B20數(shù)據(jù)端口
# define DQ_DIR TRISAbits.TRISA0                         //定義18B20D口方向寄存器
# define DQ_HIGH()  DQ =1 ; DQ_DIR =1                  //設(shè)置數(shù)據(jù)口為輸入
# define DQ_LOW()    DQ_DIR = 0 ;DQ = 0        //設(shè)置數(shù)據(jù)口為輸出
unsigned char  TLV=0 ;                        //采集到的溫度高8位
unsigned char  THV=0;                         //采集到的溫度低8位
unsigned char TZ=0;                           //轉(zhuǎn)換后的溫度值整數(shù)部分
unsigned char TX=0;                           //轉(zhuǎn)換后的溫度值小數(shù)部分
unsigned int wd;                              //轉(zhuǎn)換后的溫度值BCD碼形式
unsigned char shi;                             //整數(shù)十位
unsigned char ge;                              //整數(shù)個(gè)位
unsigned char shifen;                          //十分位
unsigned char baifen;                          //百分位
unsigned char qianfen;                         //千分位
unsigned char wanfen;                          //萬分位
#define TMR0HLOAD     0xf6        //4MHZ  2.5mS
#define TMR0LLOAD     0x4D
unsigned char TickClock = 0;      //系統(tǒng)時(shí)基

#define SCLK   LATBbits.LATB0     //74HC164時(shí)鐘
#define SDAT   LATBbits.LATB1     //74HC164數(shù)據(jù)
const unsigned char SegCode[] =   //圖型表
{
    Bmp0Map,Bmp1Map,Bmp2Map,Bmp3Map,Bmp4Map,Bmp5Map,
    Bmp6Map,Bmp7Map,Bmp8Map,Bmp9Map,BmpAMap,BmpBMap,
    BmpCMap,BmpDMap,BmpEMap,BmpFMap
};
const unsigned char SegCS[6] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};              //顯示片選
unsigned char SegBuf[6] = {BmpPMap,Bmp1Map,BmpCMap,Bmp1Map,Bmp8Map,BmpFMap}; //顯示緩沖

//-------------------------------------------------------------------------------
// 數(shù)碼管顯示驅(qū)動(dòng)
//-------------------------------------------------------------------------------
void SegDisplay(void)
{
static unsigned char i = 0;
unsigned char j;
unsigned char tep;
tep = SegCS;         //片選輸出
for(j=0;j<8;j++)        //8位
{
  if(tep&0x80) SDAT = 1;
  else         SDAT = 0;
  SCLK = 1;
  SCLK = 0;
  tep = tep<< 1;
}
tep = SegBuf;        //數(shù)據(jù)輸出
for(j=0;j<8;j++)        //8位
{
  if(tep&0x80) SDAT = 1;
  else         SDAT = 0;
  SCLK = 1;
  SCLK = 0;
  tep = tep<< 1;
}

if(i < 5) i ++;        //掃描6位
else      i = 0;
}
//-------------------------------------------------------------------------------

//-------------------------------------------------------------------------------
// ADC采集程序
//-------------------------------------------------------------------------------
unsigned int  SampleADValue[8];    // 8次采樣
unsigned int  AvgADValue = 0;      // AD采樣平均值
unsigned char ADConverStep = 0;    // AD采樣頻步
void GET_ADValue(void)
{
unsigned char i;
unsigned int ConverValue;
do
{
}while(ADCON0bits.GO_DONE);   //等待轉(zhuǎn)換完成
ConverValue = ADRESH;         //處理10位結(jié)果
ConverValue = (ConverValue << 8) + ADRESL;
SampleADValue[ADConverStep] = ConverValue;
if (ADConverStep == 7)  
{
  ConverValue = 0;
  for (i = 0; i < 8 ; i++)
  {
   ConverValue += SampleADValue;
  }
  AvgADValue = ConverValue >> 3;
  ADConverStep = 0;
}
else
{
  ADConverStep++;
}
}
//-------------------------------------------------------------------------------
// TMR1定時(shí)器初始化
//-------------------------------------------------------------------------------
void TMR1_Init(void)
{   
TMR1H = 0xF0;             //4mS 4MHz
TMR1L = 0x98;        
T1CONbits.RD16 = 1;       //16位定時(shí)方式
T1CONbits.TMR1CS = 0;     //內(nèi)部FOSC/4
PIE1bits.TMR1IE = 1;      //T1中斷 ON
}
//-------------------------------------------------------------------------------
// ADC初始化
//-------------------------------------------------------------------------------
void ADC_Init(void)               // ADC 初始化
{
ADCON0 = 0b00000001;          // ADC模塊使能
ADCON1 = 0b00001110;          // AN0 ADC輸入
ADCON2 = 0b10111111;          // 右對(duì)齊  FRC
}
//-------------------------------------------------------------------------------
// 高優(yōu)先級(jí)中斷向量
//-------------------------------------------------------------------------------
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void)
{
_asm
goto  Interrupt_High        //跳到中斷程
_endasm
}
//-------------------------------------------------------------------------------
// 高優(yōu)先級(jí)中斷服務(wù)程序
//-------------------------------------------------------------------------------
#pragma interrupt Interrupt_High
void Interrupt_High(void)
{
if(PIR1bits.TMR1IF)          //T1中斷
{
  PIR1bits.TMR1IF = 0;     //清除標(biāo)志位
  TMR1H = 0xF0;            //4MS
  TMR1L = 0x98;
  SegDisplay();            //掃描顯示
  TickClock = 1;          //置位
}
if(PIR1bits.RCIF)            // 接收中斷
{
  PIR1bits.RCIF = 0;
  TXREG = RCREG;           // 將收到的數(shù)據(jù)發(fā)出
  if(RCSTAbits.OERR)       // 接收溢出錯(cuò)誤處理
  {
   RCSTAbits.CREN = 0;
   RCSTAbits.CREN = 1;
  }
}
}
//-------------------------------------------------------------------------------
// 計(jì)算溫度值
//-------------------------------------------------------------------------------
int GET_TempValue(unsigned int ADCValue)
{
ADCValue = (32*ADCValue)/10;     // y = (3300/1024)* x

if(ADCValue >500)   ADCValue = (ADCValue - 500);   //零上   500mV時(shí) 零度
else                ADCValue = (500 - ADCValue);   //零下

return ADCValue;
}
void initled()//初始化數(shù)碼管
{
SegBuf[0] = Bmp0Map;               // "T"
SegBuf[1] = Bmp0Map;                  // "P"
SegBuf[2] = Bmp0Map;    //千位
SegBuf[3] = Bmp0Map;//百位
SegBuf[4] = Bmp0Map;
SegBuf[5] = Bmp0Map;
}
//-------------------------------------------------------------------------------
// 數(shù)碼管分段顯示函數(shù)
//-------------------------------------------------------------------------------
void LEDisplay(unsigned int ADValue)
{
SegBuf[0] = Bmp0Map;               // "T"
SegBuf[1] = Bmp0Map;                  // "P"
SegBuf[2] = SegCode[ADValue/1000];    //千位
SegBuf[3] = SegCode[ADValue%1000/100];//百位
SegBuf[4] = SegCode[ADValue%100/10]|Smg_dp;  //十位 有小數(shù)點(diǎn)
SegBuf[5] = SegCode[ADValue%10];      //個(gè)位
}
//-------------------------------------------------------------------------------
// 主程序部分
//-------------------------------------------------------------------------------
void main(void)
{
unsigned int SystemTick = 0; // 串口發(fā)數(shù)據(jù)定時(shí)
TRISB = 0b11111100;          //RB0 RB1 輸出
TMR1_Init();                 //定時(shí)器1初始化  
ADC_Init();                  //ADC初始化

INTCONbits.PEIE = 1;         //外設(shè)中斷允許
INTCONbits.GIE  = 1;         //總中斷允許
T1CONbits.TMR1ON= 1;         //使能T1
  initled();


while(1)
{
  if(TickClock)            //采集AD值
  {
   TickClock = 0;
   ADCON0bits.GO_DONE = 1;
   SystemTick ++;
   GET_ADValue();  
  }
  if(SystemTick > 300)     //發(fā)送1次AD采樣值
  {
   SystemTick = 0;
   AvgADValue = GET_TempValue(AvgADValue);  //獲取溫度值
   LEDisplay(AvgADValue);                   //顯示溫度值
  }
}
}
//-------------------------------------------------------------------------------



我想把數(shù)碼管顯示和定時(shí)器分離,搞74HC146清楚數(shù)碼管到底怎么驅(qū)動(dòng)的。或者哪位大神幫忙注釋下,
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:111634 發(fā)表于 2016-7-3 11:15 | 只看該作者
本帖最后由 zl2168 于 2016-7-3 11:21 編輯

是74HC164,不是74HC146。164是串入并出一位寄存器。
先給你個(gè)74HC164串入并出控制16循環(huán)燈案例吧
區(qū)別是:你的案例是8位段碼和6位位碼(共14位),我的案例是16位數(shù)據(jù),實(shí)際上是一樣的。


Proteus仿真一下,確認(rèn)有效。

實(shí)例42 74HC164串行輸出控制8-16循環(huán)燈.rar (53.19 KB, 下載次數(shù): 4)

以上摘自張志良編著《單片機(jī)實(shí)驗(yàn)實(shí)訓(xùn)100例》 ISBN 978-7-5124-1603-1,北航社出版

書中電路和程序設(shè)計(jì)有詳細(xì)說明,程序語句條條有注解。




回復(fù)

使用道具 舉報(bào)

板凳
ID:472325 發(fā)表于 2019-2-7 11:09 | 只看該作者
要先保證一種情況下亮,定時(shí)與溫度只是錯(cuò)開不斷刷新的事
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久91| 亚洲二区视频 | 中文字幕免费在线 | 日韩视频在线免费观看 | 精品国产一区二区三区久久狼黑人 | 久久精品亚洲精品国产欧美 | 中文字幕在线中文 | 日本黄色高清视频 | 龙珠z在线观看 | 色男人的天堂 | 国产精品3区 | 免费在线性爱视频 | 亚洲在线高清 | 狠狠综合网 | 亚洲欧洲日韩精品 中文字幕 | 九九爱这里只有精品 | 久久99精品久久久久久琪琪 | 91精品国产91久久久久久最新 | 51ⅴ精品国产91久久久久久 | 亚洲一区二区三区四区五区午夜 | 欧美日韩一区二区在线播放 | 日韩一区二区三区视频 | 激情五月综合 | 日韩欧美在线观看 | 日韩视频精品在线 | 免费一区二区三区 | 国产网站在线免费观看 | 欧美成年人网站 | 欧美综合在线观看 | 午夜精品一区二区三区免费视频 | 亚洲精品中文字幕在线 | 青青久草 | 雨宫琴音一区二区在线 | 国产区在线 | 中文字幕在线观看精品 | 中文在线观看视频 | 国产精品欧美精品 | 国产视频中文字幕在线观看 | 男人天堂视频在线观看 | 国产成人免费视频网站高清观看视频 | 久久亚洲一区二区三区四区 |