天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術(shù)熱線: 4007-888-234
設(shè)計開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應用測試 完善的開發(fā)代碼案例庫分享

技術(shù)支持

從全面的產(chǎn)品導入到強大技術(shù)支援服務 全程貼心伴隨服務,創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

新聞中心

提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

數(shù)控步進直流穩(wěn)壓電源c程序

更新時間: 2019-03-23
閱讀量:1698

數(shù)控步進直流穩(wěn)壓電源c程序

#include
//此程序?qū)崿F(xiàn)"數(shù)控步進直流穩(wěn)壓電源"的功能,調(diào)試時為了避免資源沖突,應使實驗板上 的拔碼開關(guān)S8拔向高電平
//本程序設(shè)定S9鍵為增加鍵,當按住S9鍵不松開時,輸出Vout以0.1V連續(xù)步進,
//直至鍵S9松開,當以一定的時間間隔點動S9鍵時,輸出Vout也為點動步進
//遞減鍵S11的功能與S9基本相同時,輸出電壓的值顯示在3個LED上
unsigned char R1,R2,R3,TXDATA,LEDF,BJF,COUNTW,data;
unsigned int i;
const char table[11]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92, 0x82

,0XD8,0x80,0x90,0xFF};
//不帶小數(shù)點的顯示段碼表
const char table0[11]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,

0xFF};
//帶小數(shù)點的的顯示段碼表
unsigned char s[4]; //定義一個顯示緩沖數(shù)組
//把需要顯示的數(shù)字裝入顯示緩沖數(shù)組
void sfz()
{
s[0]=R3;
s[1]=R2;
s[2]=R1;
s[3]=0x0A; //最后一個LED顯示"DARK"
}
//系統(tǒng)各寄存器初始化子程序
void initial()
{
R1=0X00;
R2=0X00;
R3=0X00;
sfz(); //把需要顯示的數(shù)字裝入顯示緩沖數(shù)組
TXDATA=0X00;
LEDF=0X01;
BJF=0X01;
TRISB1=0;
TRISB2=0;
TRISB4=1;
TRISB5=1; //設(shè)置與鍵盤相關(guān)的各口的輸入輸出方式
RB1=0;
RB2=0; //設(shè)置掃描初始條件
}
//spi方式顯示初始化子程序
void SPIINIT()
{
PIR1=0;
SSPCON=0x30;
SSPSTAT=0xC0;
//設(shè)置SPI的控制方式,允許SSP方式,并且時鐘下降沿發(fā)送,與"74HC595,當其
//SCLK從低到高跳變時,串行輸入寄存器"的特點相對應
TRISC=0xD7; //SDO引腳為輸出,SCK引腳為輸出
TRISA5=0; //RA5引腳設(shè)置為輸出,以輸出顯示鎖存信號
}
//I2C初始化子程序
void i2cint()
{
SSPCON = 0X08; //初始化SSPCON寄存器
TRISC3 =1;       //設(shè)置SCL為輸入口
TRISC4 =1; //設(shè)置SDA為輸入口
TRISA4 = 0;
SSPSTAT=0X80; //初始化SSPSTAT寄存器
SSPADD=0X02; //設(shè)定I2C時鐘頻率
SSPCON2=0X00; //初始化SSPCON2寄存器
di(); //關(guān)閉總中斷
SSPIF=0; //清SSP中斷標志
RA4=0; //關(guān)掉74HC165的移位時鐘使能,以免74HC165
           //移位數(shù)據(jù)輸出與I2C總線的數(shù)據(jù)線發(fā)生沖突
SSPEN=1;       //SSP模塊使能
}
        //軟件延時子程序
void DELAY()
{
for(i = 3553; --i ;) continue;
}
//鍵服務子程序
void keyserve()
{
PORTB=0XFD ;
if(RB5==0) BJF=0X01; //S9鍵按下,步進加標志置1
PORTB=0XFB ;
if(RB5==0) BJF=0X00; //S11鍵按下,步進加標志清0
RB1=0; //恢復PORTB的值
RB2=0;
}
//鍵掃描子程序
void KEYSCAN()
{
while(1){
while(1) {
if (RB5==0) break;
}
DELAY(); //若有鍵按下,則軟件延時
if (RB5==0)break; //若還有鍵按下,則終止循環(huán)掃描,返回
}
}
//SPI傳送數(shù)據(jù)子程序
void SPILED(data)
{
SSPBUF=data; // 啟動發(fā)送
do {
;
}while(SSPIF==0);
SSPIF=0;
}
//顯示子程序
void display()
{
SPIINIT(); //spi方式顯示初始化
RA5=0; //準備鎖存
for(COUNTW=0;COUNTW<4;COUNTW ) {
data=s[COUNTW];
if(COUNTW==1) data=table0[data];//第二位需要顯示小數(shù)點
else data=table[data];
SPILED(data); //發(fā)送顯示段碼
}
for(COUNTW=0;COUNTW<4;COUNTW ){
data=0xFF;
SPILED(data); //連續(xù)發(fā)送4個DARK,使顯示看起來好看一些
}
RA5=1; //最后給一個鎖存信號,代表顯示任務完成
}
//I2C總線輸出數(shù)據(jù)子程序
void i2cout()
{
i2cint(); //因為SPI輸出和I2C輸出不能同時工作,則需要
//不斷在兩種方式見切換
SEN=1; //產(chǎn)生I2C啟動信號
for(i=0x02;--i;) continue; //給予一定的延時,保證啟動
do {
RSEN=1; //產(chǎn)生I2C啟動信號
}while(SSPIF==0); //如果沒能啟動,則反復啟動,直到啟動為止
SSPIF=0; //SSPIF標志清0
SSPBUF=0X58; //I2C總線發(fā)送地址字節(jié)
do {
;
}while(SSPIF==0); //等待地址發(fā)送完畢
SSPIF=0; //SSPIF標志清0
SSPBUF=0X01; //I2C總線發(fā)送命令字節(jié)
do {
;
}while(SSPIF==0); //等待命令發(fā)送完畢
SSPIF=0; //SSPIF標志清0
SSPBUF=TXDATA; //I2C總線發(fā)送數(shù)據(jù)字節(jié)
do {
;
}while(SSPIF==0); //等待數(shù)據(jù)發(fā)送完畢
SSPIF=0; //SSPIF標志清0
PEN=1; //產(chǎn)生停止條件
do {
;
}while(SSPIF==0); //等待停止條件產(chǎn)生
SSPIF=0; //SSPIF標志清0
}
//步進加子程序
void BJADD()
{
R1 ;
TXDATA=TXDATA 2;
if(R1>9) {
R1=0;
R2 ;
if(R2>9) {
R2=0;
R3 ;
}
}
if((R3==1)&&(R2==2)&&(R1==1)){
R3=0;
R2=0;
R1=0; //若R3,R2,R1超過120,則又從0計起
TXDATA=0;
}
sfz(); //把需要顯示的數(shù)字裝入顯示緩沖數(shù)組
}
//步進減子程序
void BJSUB()
{
R1--;
TXDATA=TXDATA-2;
if(R1==0XFF) {
R1=9;
R2--;
if(R2==0XFF) {
R2=9;
R3--;
if(R3==0XFF) {
R3=1;
R2=2;
R1=0;//若R3,R2,R1小于0,則又從120計起
TXDATA=0XF0;
}
}
}
sfz(); //把需要顯示的數(shù)字裝入顯示緩沖數(shù)組
}
//主程序
main()
{
initial(); //系統(tǒng)各寄存器初始化
display(); //調(diào)用一次顯示子程序
while(1) {
i2cout(); //調(diào)用I2C子程序,啟動D/A轉(zhuǎn)換
KEYSCAN(); //鍵盤掃描
keyserve() ; //若確實有鍵按下,則調(diào)用鍵服務程序
if(BJF==0X01) BJADD();//若步進加標志為1,則調(diào)用步進加子程序
else BJSUB(); //若步進加標志為0,則調(diào)用步進減子程序
display(); //調(diào)用一次顯示子程序
}

联系我们: 托克逊县| 买车| 石泉县| 洪泽县| 临澧县| 冕宁县| 闵行区| 会同县| 望江县| 女性| 宝丰县| 宁武县| 金塔县| 岳西县| 于田县| 景谷| 二连浩特市| 广宁县| 七台河市| 新丰县| 禹州市| 巴青县| 宁夏| 郸城县| 乌拉特中旗| 大新县| 富裕县| 凤冈县| 静乐县| 京山县| 柘城县| 新密市| 东丽区| 清水县| 正安县| 澎湖县| 东山县| 咸宁市| 防城港市| 喜德县| 长寿区|