① 關於單片機輸出數碼管顯示的問題
這個對軟體編程的確麻煩,想要改變的話,可以只取兩個引腳,做串列輸出,然後外加個串列轉並行的晶元,如74HC595晶元,這樣編程上就直觀了;
② 單片機串口輸出數據
就你的程序,寫到實驗板上,發送是01,電腦接收的也是01,重復發送的。說明程序是沒有問題的。
你的問題有兩個原因:
1,你是在實驗板上測試的嗎,查看一下板上晶振的頻率可能不是11.0592MHz吧 ,而你的程序是按這個頻率計算的。如果不是,就得按實際的頻率重新計算。或者你是模擬的嗎,這同樣要看單片機的頻率。
2,單片機發送01,你在電腦是用什麼接收的,是串口助手嗎。其實,STC-ISP軟體里就有串口助手的。那要看一下接收的波特率是多少,要同樣是9600。
③ 單片機採集的數據如何即時顯示在電腦顯示器上並存儲
1、首先做一塊電路板(或者買一塊帶USB通訊的開發板),將PIC32的USB通訊管腳D+、D-通過USB座子引出來連接到電腦上。
④ 求助:單片機串列口輸出的數據是什麼類型
是全雙工通用串口,ttl電平,如果需要和其它主機進行通訊進行電平轉換,直接接max232就可認。
⑤ 簡述單片機串列口的工作方式
89系列單片機的串列通信有4種工作方式:
1、方式0是同步移位寄存器方式,幀格式8位,波特率固定為fosc/12。
2、方式1是8位非同步通信方式,幀格式10位,波特率可變:T溢出率/n(n= :32或16)。
3、方式2是9位非同步通信方式,幀格式11位,波特率固定: fosc/n(n=32 或16)。
4、方式3是9位非同步通信方式,幀格式11位,波特率可變:T溢出率(m=32或16)。
方式1、2、3的區別主要表現在幀格式及波特率兩個方面。
單片機應用范圍:
單片機滲透到我們生活的各個領域。導彈的導航裝置,飛機上各種儀表的控制,計算機的網路通訊與數據傳輸,工業自動化過程的實時控制和數據處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統,錄像機、攝像機、全自動洗衣機的控制等等。
還有自動控制領域的機器人、智能儀表、醫療器械以及各種智能機械。因此,單片機的學習、開發與應用將造就一批計算機應用與智能化控制的科學家、工程師。
⑥ 求一段STC89C52單片機將數值通過串口輸出的代碼
可以利用print函數或者sprint函數
程序如下:
#include "reg52.h" //此頭文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16;
typedef unsigned char u8;
void UsartInit()
{
SCON=0X50; //0101 000設置串列口控制寄存器sm0,sm1為01,即為工作方式1
TMOD=0X20; //設置計數器
PCON=0X80; //定義PCON寄存器中的SMOD=1,波特率加倍
TH1=0XF3; //計數器初始值設置,注意波特率是4800的,當然大家可以改
TL1=0XF3;
EA=1; //打開總中斷 根據需要
ES=1; //打開中斷允許中的串列口中斷允許
TR1=1; //打開計數器
TI = 1;//如果使用print函數,TI一定要是1 否則 刪掉該句
}
void main()
{
u16 Val;
UsartInit();
while(1)
{ Val = GetSensor();
printf("%d",Val;) //printf中一定要用u16的 不能用u8 這樣就直接將數字格式化為ascii
}
}
⑦ 單片機串列動態顯示 什麼意思
串列動態顯示包含兩個不同的意思:
串列指的是串列輸出數據;
動態指的是動態掃描顯示。
串列也可以靜態顯示,
並行也可以動態顯示,
不能混為一談。
單片機串列動態顯示的含義也有兩個:
一是利用串口或模擬串口串列輸出段碼,
再利用並口掃描位碼來顯示;
二是利用串口或模擬串口串列輸出段碼,
再利用串口或模擬串口串列輸出掃描位碼來顯示。
這兩種方式都有應用,而且第一種還比較多,尤其是在位碼較少的顯示系統。
⑧ 求助:單片機串列口輸出的數據是什麼類型
單片機串口輸出的只是數據,7位或8位或者9位,數據類型要靠程序來判斷和處理。串口本身是無法決定的。一次只能傳送一幀數據。
⑨ 求51單片機LCD12864串列顯示程序,只用SID口和SCLK口,能顯示輸出四行中文的,最好寫上main函數,謝謝
//LCD12864字型檔系列(控制器ST7920A),單片機:89S52,晶振:12M,
//串口連接 與 並口連接 ( 串口時 屏蔽 並行模塊)
//並行連接方式,P2.0-RS,P2.1-RW,P2.2-E
#include<reg52.h>
#include <intrins.h>
sbit RS=P3^2; //串口時為CS
sbit RW=P3^1; //串口為SID
sbit E=P3^0; //串口為時鍾SCLK
sbit stop=P2^2;
sbit PSB=P3^4;
sbit REST=P3^3;
//以下是用<at89x51.h>頭文件的定義
/*
#define RS P2_0
#define RW P2_1 //定義引腳
#define E P2_2
#define PSB P2_3
#define REST P2_4
#define Data P1
#include<at89x51.h>
*/
#define BF 0x80 //用於檢測LCM狀態字中的Busy標識
typedef unsigned int Uint;
typedef unsigned char Uchar;
//字元串例子
//"F1--English",也可以往裡面寫入漢字碼,一個漢字由兩個碼組成
const Uchar F1English[]={0x46,0x31,0x2d,0x2d,0x45,0x6e,0x67,0x6c,0x69,0x73,0x68,0x00};
const Uchar lengthF1=6; //字元串長度
//漢字,直接可以寫入字形
unsigned char code uctech[] = {"有限公司"};
const Uchar lengthCF3=8;
Uchar code TAB1[]={
/*-- 調入了一幅圖像:D:\公司的文件\程序圖片\未命名11.bmp --*/
/*-- 寬度x高度=128x64 --*/
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x05,0xAE,0x90,0x00,0x00,0x00,0x00,0x00,
0x95,0x55,0x48,0x80,0x00,0x00,0x00,0x00,
0x2B,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
0xA8,0x00,0x22,0x15,0x20,0x00,0x00,0x00,
0x97,0xFB,0x00,0x00,0x00,0x00,0x00,0x00,
0x45,0x55,0x08,0xA0,0x00,0x00,0x00,0x0A,
0x6F,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,
0xB2,0x80,0x40,0x00,0x04,0x40,0x00,0x00,
0xBA,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x4D,0x55,0x15,0x15,0x20,0x00,0x00,0x95,
0xD5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xE8,0x40,0x40,0x00,0x00,0x00,0x4A,
0xAA,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0x2A,0x00,0x40,0x00,0x00,0x15,
0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFD,0xD0,0xAA,0x01,0x00,0x00,0x25,
0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xB6,0x00,0x10,0x00,0x01,0x4A,
0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFD,0xE8,0x40,0x00,0x00,0x11,
0x00,0x24,0x84,0x00,0x00,0x00,0x00,0x00,
0xAB,0xFF,0xFF,0x55,0x00,0x00,0x00,0x24,
0x02,0x49,0x5E,0xA0,0x00,0x00,0x00,0x00,
0x84,0xBF,0xFF,0xF4,0x88,0x00,0x00,0x00,
0x10,0x05,0xFF,0xF4,0x00,0x00,0x00,0x00,
0x29,0x0B,0xFF,0xFA,0x20,0x00,0x00,0x00,
0x02,0xBF,0xFF,0xFC,0x00,0x00,0x00,0x00,
0x44,0xA0,0x57,0xFD,0x80,0x00,0x00,0x00,
0x08,0x5F,0xFF,0xFF,0x80,0x00,0x00,0x00,
0x91,0x0A,0xAA,0xF6,0x50,0x00,0x00,0x00,
0x41,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,
0x44,0xA0,0x01,0x1B,0x84,0x00,0x00,0x00,
0x26,0xFF,0xFF,0xFF,0x90,0x00,0x00,0x00,
0x11,0x0A,0xAA,0x6D,0x68,0x00,0x00,0x00,
0x0B,0xFB,0xFF,0xEF,0xE0,0x00,0x00,0x00,
0xC4,0xA0,0x01,0x02,0x80,0x00,0x00,0x00,
0x43,0xF1,0xFE,0x63,0xF0,0x00,0x00,0x00,
0x15,0x55,0x54,0x55,0x6A,0x00,0x00,0x00,
0x9F,0xE3,0xFC,0x87,0x38,0x00,0x00,0x00,
0xCA,0xAB,0x91,0x00,0x90,0x00,0x00,0x00,
0x07,0xC1,0xFA,0x2A,0x80,0x00,0x00,0x00,
0x25,0xFF,0xFE,0x95,0x2A,0x00,0x00,0x00,
0x2F,0x13,0xFE,0xFC,0x10,0x00,0x00,0x00,
0x95,0xFF,0xFF,0xC0,0x50,0x00,0x00,0x00,
0x0F,0x41,0xFF,0xF3,0x80,0x00,0x00,0x00,
0x4F,0xFF,0xFF,0xF9,0x2A,0x00,0x00,0x00,
0x9F,0x08,0xFF,0xD4,0x00,0x00,0x00,0x00,
0xB3,0xFF,0xFF,0xFE,0x54,0x80,0x00,0x00,
0x1E,0xA0,0x7F,0xA0,0x00,0x00,0x00,0x00,
0x5F,0xFE,0x7F,0xFE,0xAA,0x00,0x00,0x00,
0x5F,0x57,0xFE,0x00,0x00,0x00,0x00,0x00,
0xAF,0xFD,0x7F,0xFF,0x94,0x80,0x00,0x00,
0x1F,0xFE,0xE8,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFA,0x7F,0x5F,0xCA,0x00,0x00,0x00,
0x3F,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
0xAF,0xF1,0x7F,0xDE,0xF5,0x40,0x00,0x00,
0x1A,0xA0,0x80,0x00,0x00,0x00,0x00,0x00,
0xDF,0xF2,0x3F,0xFC,0xC2,0x00,0x00,0x00,
0x50,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
0x2F,0xFA,0xBF,0xFF,0xF4,0xA0,0x00,0x00,
0x05,0x42,0x00,0x00,0x00,0x00,0x00,0x00,
0x97,0xFE,0x3F,0xFF,0xE3,0x00,0x00,0x00,
0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x68,0xFF,0xDF,0xD5,0x78,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0x5F,0xFF,0x48,0x02,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xD0,0xAA,0xF4,0xA0,0xAA,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0A,0x45,0x09,0x05,0x11,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA1,0x28,0xA0,0x00,0x44,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x08,0x42,0x04,0x52,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA5,0x09,0x51,0x00,0x48,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x50,0x04,0x4A,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xAA,0x05,0x50,0x21,0x48,0x20,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x90,0x02,0x84,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xD4,0x05,0x48,0x10,0x48,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x81,0x20,0x00,0x02,0x02,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA4,0x84,0x92,0x48,0x94,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x48,0x10,0x00,0x00,0x21,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//這個是在串口時指令和數據之間的延時
/*
void delay10US(Uchar x)
{
Uchar k;
for(k=0;k<x;k++);
}
*/
const Uchar delay=250; //延時時間常數
static void Wait1ms(void)//延遲1 ms
{
Uchar cnt=0;
while (cnt<delay) cnt++;
}
//延遲n ms
void WaitNms(int n)
{
Uchar i;
for(i=1;i<=n;i++)
Wait1ms();
}
void stopint(void)//中斷程序
{
if(stop==0)
while(1);
}
//**************************************************************************//
//以下是並口時才開的
//讀忙標志,
void RDBF(void)
{
Uchar temp;
RS=0; // RS=0
RW=1; // RW=1
while(1)
{
P1=0xFF; //數據線為輸入
E=1;
temp=P1;
E=0; // E=0
if ((temp&0x80)==0) break;
}
}
//寫數據到指令寄存器
void WRCommand(Uchar comm)
{
RDBF();
RW=0;
P1=comm;
E=1;
E=0;
}
//寫數據到數據寄存器
void WRData(Uchar TEMP)
{
RDBF();
RS=1;
RW=0;
P1=TEMP;
E=1;
E=0;
stopint();
}
/////////////////////////////////////////////////////////////////////////////////
//以下是串口時開的讀寫時序
/*void SendByteLCD(Uchar WLCDData)
{
Uchar i;
for(i=0;i<8;i++)
{
if((WLCDData<<i)&0x80)RW=1;
else RW=0;
E=0;
E=1 ;
}
}
SPIWR(Uchar Wdata,Uchar WRS)
{
SendByteLCD(0xf8+(WRS<<1));
SendByteLCD(Wdata&0xf0);
SendByteLCD((Wdata<<4)&0xf0);
}
void WRCommand(Uchar CMD)
{
RS=0;
RS=1;
SPIWR(CMD,0);
delay10US(90);//89S52來模擬串列通信,所以,加上89S52的延時,
}
void WRData(Uchar Data)
{
RS=0;
RS=1;
SPIWR(Data,1);
}
*/
/*******************************************************************/
//初始化LCD-8位介面
void LCDInit(void)
{ // PSB=0; //串口
PSB=1;//並口時選這個,上一行取消
REST=1;
REST=0;
REST=1;
WRCommand(0x30); //基本指令集,8位並行
WRCommand(0x06); //啟始點設定:游標右移
WRCommand(0x01); //清除顯示DDRAM
WRCommand(0x0C); //顯示狀態開關:整體顯示開,游標顯示關,游標顯示反白關
WRCommand(0x02); //地址歸零
}
//顯示數組字元串(顯示半寬字型16*8點陣)
void ShowQQChar(Uchar addr,Uchar *english,Uchar count)
{
Uchar i;
WRCommand(addr); //設定DDRAM地址
for(i=0;i<count;)
{
WRData(english[i*2]);
WRData(english[i*2+1]);
i++;
}
}
//顯示連續字串(半寬字元)
void ShowNUMChar(Uchar addr,Uchar i,Uchar count)
{
Uchar j;
for(j=0;j<count;)
{
WRCommand(addr); //設定DDRAM地址
WRData(i+j);
j++;
WRData(i+j);
addr++;
j++;
}
}
//自定義字元寫入CGRAM
void WRCGRAM(Uchar data1,Uchar data2,Uchar addr)
{
Uchar i;
for(i=0;i<16;)
{
WRCommand(addr+i); //設定CGRAM地址
WRData(data1);
WRData(data1);
i++;
WRCommand(addr+i); //設定CGRAM地址
WRData(data2);
WRData(data2);
i++;
}
}
//顯示自定義的字元,並把這個字元填滿全屏16*16
void ShowCGChar(Uchar addr,Uchar i)
{
Uchar j;
for(j=0;j<0x20;)
{
WRCommand(addr+j); //設定DDRAM地址
WRData(0x00);
WRData(i);
j++;
}
}
void CLEARGDRAM(void)
{
Uchar j;
Uchar i;
WRCommand(0x34);
WRCommand(0x36);
for(j=0;j<32;j++)
{
WRCommand(0x80+j);
WRCommand(0x80);//X坐標
for(i=0;i<32;i++)//
{
WRData(0x00);
}
}
}
//寫入GDRAM 繪圖,Y是Y繪圖坐標,2個位元組一行,CLONG是圖形長度,以位元組
//為單位;HIGHT是圖形高度,TAB是圖形數據表.12864M的圖形顯示是相當於256*32點陣.
//由兩屏128*32上下兩屏組成,同一行的下屏的頭地址緊接上屏的未地址。
//繪圖在串口輸入時,會比在並口下的輸入要慢一些
void WRGDRAM(Uchar Y1,Uchar clong,Uchar hight,Uchar *TAB1)
{
Uint k;
Uchar j;
Uchar i;
WRCommand(0x34);
WRCommand(0x36);
for(j=0;j<hight;j++)//32
{ //先上半屏
WRCommand(Y1+j); //Y總坐標,即第幾行
WRCommand(0x80);//X坐標,即橫數第幾個位元組開始寫起
for(i=0;i<clong;i++)//
{
WRData(TAB1[clong*j+i]);
}
//後下半屏
for(k=0;k<clong;k++)//
{
WRData(TAB1[clong*(j+hight)+k]);
}
}
}
void menu(void)
{
LCDInit();
ShowNUMChar(0x80,0x01,0x0f);//顯示半寬特殊符號
ShowNUMChar(0x90,0x30,0x0f);//顯示半寬0~?數字標點
ShowNUMChar(0x88,0x41,0x0f);//顯示半寬A~P大寫
ShowNUMChar(0x98,0x61,0x0f);//顯示半寬a~p小寫
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
WRCGRAM(0xff,0x00,0x40);//寫入橫
WRCGRAM(0x00,0xff,0x50);//寫入橫2
WRCGRAM(0xaa,0xaa,0x60);//寫入豎
WRCGRAM(0x55,0x55,0x70);//寫入豎2
ShowCGChar(0x80,0x00);//顯示橫並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowCGChar(0x80,02);//顯示橫2並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowCGChar(0x80,04);//顯示豎並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowCGChar(0x80,06);//顯示豎2並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
WRCGRAM(0x00,0x00,0x40);//清CGRAM1
WRCGRAM(0x00,0x00,0x50);//清CGRAM2
WRCGRAM(0xaa,0x55,0x40);//寫入點
WRCGRAM(0x55,0xaa,0x50);//寫入點2
ShowCGChar(0x80,00);//顯示點並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowCGChar(0x80,02);//顯示點2並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowQQChar(0x80,uctech,lengthCF3);//顯示'有限公司',以下共四行
ShowQQChar(0x90,uctech,lengthCF3);
ShowQQChar(0x88,uctech,lengthCF3);
ShowQQChar(0x98,uctech,lengthCF3);
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
}
void menu2(void)
{ CLEARGDRAM();
WRGDRAM(0x80,16,32,TAB1);
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
}
//主函數
void main(void)
{
menu();//初始化及半寬字元和點橫豎漢字掃描
menu2();//繪圖顯示
for(;;)
{;}
}