日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言程序加仿真,求助。C语言的程序和仿真

發布時間:2024/9/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言程序加仿真,求助。C语言的程序和仿真 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

該樓層疑似違規已被系統折疊?隱藏此樓查看此樓

#include "msp430x14x.h"

#define uint unsigned int

#define uchar unsigned char

#define DQ_OUT P1DIR|=BIT0

#define DQ_IN P1DIR&=~BIT0

#define DQ_LOW P1OUT&=~BIT0

#define DQ_HIGH P1OUT|=BIT0

#define DQ_DATA P1IN&BIT0

//共陽數碼管編碼表

uchar Code[18]={0xC0,0xF9,0xA4,0xB0,//0,1,2,3

0x99,0x92,0x82,0xF8,//4,5,6,7

0x80,0x90,0x88,0x83,//8,9,A,b

0xC6,0xA1,0x86,0x8E,//C,d,E,F

0xBF,0xFF};//-,全滅

uchar Bit[4]={0,0,0,17}; //數碼管各位顯示的數字

uchar BitCode=0x01; //數碼管位碼初值

uchar wei[]={0x01,0x02,0x04,0x08};

uint j=0;

uint l=0;

uchar MSB; //溫度高字節

uchar LSB; //溫度低字節

int t1=0; //溫度整數部分數值

uint t2=0; //溫度小數部分數值

uchar flag; //負溫度標志

//時鐘初始化函數

void InitClock(void){

BCSCTL1=RSEL2+RSEL1+RSEL0;//XT2 開啟 LFXT1 工作在低頻模式 ACLK

//不分頻 最高的標稱頻率

DCOCTL=DCO2+DCO1+DCO0;//DCO 為最高頻率

do{

IFG1&=~OFIFG;//清除振蕩器失效標志

for(uint i=255;i>0;i--);

}while(IFG1&OFIFG);//判斷XT2 是否起振

BCSCTL2=SELM1+SELS;//MCLK SMCLK 時鐘源為TX2CLK 不分頻

}

//端口初始化函數

void InitPort(void){

P2SEL=0x00;//P2 口所有引腳設置為一般的IO 口

P3SEL=0x00;//P3 口所有引腳設置為一般的IO 口

P2DIR=0xFF;//P2 口所有引腳設置為輸出方向

P3DIR=0xFF;//P3 口所有引腳設置為輸出方向

P2OUT=0x00;//P2 口先輸出低電平

P3OUT=0x80;//P3 口先輸出低電平

P5SEL&=~BIT7;//P5. 設7置為一般的IO 口

P5DIR|=BIT7;//P5.7 設置為輸出方向

P5OUT&=~BIT7;//P5.7 輸出低電平來使能74HC573 來驅動數碼管

}

//ms 級延時子程序

void DelayMs(uint ms){

while(ms--){

for(uint i=0;i<700;i++);

}

}

//數碼管掃描顯示程序

void Display(void){

for(uchar i=0;i<4;i++){

P3OUT=BitCode; //輸出位碼

if(i==3){ //輸出段碼,如果第三位顯示小數點

P2OUT=Code[Bit[i]]&0x7F;

}else{

P2OUT=Code[Bit[i]];

}

BitCode<<=1;//位碼右移一位

if(BitCode==0x10) BitCode=0x01;

DelayMs(2); //延時1ms

//P2OUT=0XFF;

}

}

//10us 級延時子程序

void Delayus(uint us){

while(us--){

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

_NOP();_NOP();_NOP();_NOP();_NOP();

}

}

//初始化DS18B20

void DS18B20Init(void){

DQ_OUT;//設置為輸出方向

DQ_LOW;//拉低總線

Delayus(50);

DQ_HIGH;//釋放總線

Delayus(6);

DQ_IN;//設置為輸入方向

while(DQ_DATA);//等待應答信號

while(~DQ_DATA);//等待釋放總線

}

//讀一個字節

uchar ReadByte(void){

uchar i;

uchar ReadData=0;

for(i=0;i<8;i++){

DQ_OUT;

DQ_LOW;

ReadData>>=1;

DQ_HIGH;

Delayus(1);

DQ_IN;

if(DQ_DATA) ReadData|=0x80;

Delayus(6);

}

return ReadData;

}

//寫一個字節

void WriteByte(uchar WriteData){

uchar i;

uchar tmpData;

for(i=0;i<8;i++){

tmpData=WriteData&0x01;

WriteData>>=1;

DQ_OUT;

DQ_LOW;

if(tmpData){

DQ_HIGH;

}

else{

DQ_LOW;

}

Delayus(5);

DQ_HIGH;

}

}

//溫度計算程序

void GetT(){

if((MSB&0xF0)>0){ //判斷是否為負溫度

flag=1;

}else{

flag=0;

}

if(flag){ //如果為負溫度取反加1

MSB=~MSB;

LSB=~LSB+1;

}

t1=MSB<<4; //得到溫度整數部分

t1|=(LSB>>4);

t2=(uint)((LSB&0x0F)*0.0625*10000); //得到溫度小數部分并擴大10000 倍

//計算各位數碼管要顯示的數值

if(flag){

Bit[1]=16; //如果為負溫度則顯示"-"

}else{

Bit[1]=t1/100;

}

Bit[2]=t1%100/10;

Bit[3]=t1%10;

//Bit[4]=t2/1000;

//Bit[5]=t2%1000/100;

//Bit[6]=t2%100/10;

//Bit[7]=t2%10;

}

void main(){

WDTCTL=WDTPW+WDTHOLD;//關閉看門狗

InitClock();

InitPort();

_DINT();//關閉中斷

j=0;l=0;

while(1){

DS18B20Init();

WriteByte(0xCC); //跳過ROM 配置

WriteByte(0x44);//啟動溫度轉換

DS18B20Init();

WriteByte(0xCC);

WriteByte(0xBE); //讀溫度寄存器

LSB=ReadByte(); //讀溫度數據低字節

MSB=ReadByte(); //讀溫度數據高字節

GetT(); //計算溫度

Display();

}

}

總結

以上是生活随笔為你收集整理的c语言程序加仿真,求助。C语言的程序和仿真的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。