1602c語言編程,1602單片機程序

本文目錄一覽:

麻煩你能不能寫一個c語言程序 用at89c52單片機要求使用1602液晶顯示當前時間和溫度編程

#include REGX52.H

#include stdio.h

#include “LCD1602.h”

#include “DS1302.h”

sbit DQ=P3^0;//ds18b20 端口

unsigned int ReadTemperature(void);

bit Init_DS18B20(void);

unsigned char ReadOneChar(void);

void WriteOneChar(unsigned char dat);

void DelayUs2x(unsigned char);

void Delay1ms(unsigned int);

/*———————————————–

  名稱:18B20溫度傳感器

  網站:

  編寫:shifang

  日期:2009.5

  修改:無

  內容:18B20單線溫度檢測的應用樣例程序

————————————————*/

/*———————————————–

                    18b20初始化

————————————————*/

bit Init_DS18B20(void)

{

 bit dat=0;

 DQ = 1;    //DQ複位

 DelayUs2x(5);   //稍做延時

 DQ = 0;         //單片機將DQ拉低

 DelayUs2x(200); //精確延時 大於 480us 小於960us

 DelayUs2x(200);

 DQ = 1;        //拉高總線

 DelayUs2x(50); //15~60us 後 接收60-240us的存在脈衝

 dat=DQ;        //如果x=0則初始化成功, x=1則初始化失敗

 DelayUs2x(25); //稍作延時返回

 return dat;

}

void DelayUs2x(unsigned char t)

{   

 while(–t);

}

/*————————————————

                    讀取一個位元組

————————————————*/

unsigned char ReadOneChar(void)

{

unsigned char i=0;

unsigned char dat = 0;

for (i=8;i0;i–)

 {

  DQ = 0; // 給脈衝信號

  dat=1;

  DQ = 1; // 給脈衝信號

  if(DQ)

   dat|=0x80;

  DelayUs2x(25);

 }

 return(dat);

}

/*————————————————

                    寫入一個位元組

————————————————*/

void WriteOneChar(unsigned char dat)

{

 unsigned char i=0;

 for (i=8; i0; i–)

 {

  DQ = 0;

  DQ = dat0x01;

  DelayUs2x(25);

  DQ = 1;

  dat=1;

 }

DelayUs2x(25);

}

/*————————————————

                    讀取溫度

————————————————*/

unsigned int ReadTemperature(void)

{

unsigned char a=0;

unsigned int b=0;

unsigned int t=0;

Init_DS18B20();

WriteOneChar(0xCC); // 跳過讀序號列號的操作

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

Delay1ms(10);

Init_DS18B20();

WriteOneChar(0xCC); //跳過讀序號列號的操作 

WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度

a=ReadOneChar();   //低位

b=ReadOneChar();   //高位

b=8;

t=a+b;

return(t);

}

void Delay1ms(unsigned int count)

{

unsigned int i,j;

for(i=0;icount;i++)

for(j=0;j120;j++);

}

main()

{

SYSTEMTIME CurrentTime;

int temp;

float temperature;

unsigned char dist[4];

LCD_Initial();

Initial_DS1302();

Init_DS18B20();

GotoXY(14,0);

Print(“.”);

GotoXY(15,1);

Print(“C”);

while(1)

{

DS1302_GetTime(CurrentTime);

TimeToStr(CurrentTime);

DateToStr(CurrentTime);

GotoXY(0,0);Print(“20”);

GotoXY(2,0);

Print(CurrentTime.DateString);

GotoXY(0,1);

Print(CurrentTime.TimeString);

temp=ReadTemperature();

temperature=(float)temp*0.0625;

sprintf(dist,”%4f”,temperature);

GotoXY(9,1);

Print(dist);

Delay1ms(400);

}

}

求單片機ds1302+1602電子鐘c語言編程。謝謝。

//液晶顯示溫度

#include “AT89X52.H”

#define Ddata P0

sbit RS=P3^5; //命令數據控制端

sbit RW=P3^6; //讀寫選擇端

sbit LCDE=P3^7; //液晶使能端

sbit DQ=P1^0; //ds18b20與單片機連接口

#define uchar unsigned char

#define uint unsigned int

unsigned char hour=0,min=0,sec=0; //定義初值

unsigned int count=0;

unsigned char line1[16]={“

temp: “}; //16個字符

unsigned char line2[16]={” time: 00:00:00″}; //16個字符

unsigned char tab[]={‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’}; //數組

uchar

data disdata[5];

uint tvalue; //溫度值

uchar tflag; //溫度正負標誌

void time();

/*************************lcd1602程序**************************/

void delay1ms(unsigned int ms)//延時1毫秒(不夠精確的)

{

unsigned

int i,j;

for(i=0;ims;i++)

for(j=0;j110;j++);

}

void delay­5ms()//延時5毫秒(不夠精確的)

{

unsigned

int i;

for (i=0;i1000;i++);

}

void delay50us()

{

register

int i;

for (i=0;i20;i++);

}

void delay()

{unsigned char m,n;

for(m=255;m0;m–)

for(n=255;n0;n–);

}

void wr_com(unsigned char comm)

//********寫控制字符程序 E=1 RS=0

RW=0**********//

{

LCDE=0; //使能端

RS=0;

//********RS寄存器選擇輸入端,當RS=0;當進行寫模塊操作,指向指令寄存器。

RW=0;

//********當RS=1,無論是讀操作還是寫操作,都是指向數據寄存器。

LCDE=1;

Ddata=comm;

RS=0;

RW=0;

LCDE=0;

}

void wr_data(unsigned char dat)//*****當前位置寫字符子程序:E=1 RS=1 RW=0

{

LCDE=0;

RS=0;

//********RS寄存器選擇輸入端,當RS=0;當進行寫模塊操作,指向指令寄存器。

RW=0;

//********當RS=1,無論是讀操作還是寫操作,都是指向數據寄存器。

RS=1;

RW=0;

LCDE=1;

Ddata=dat; //將dat賦給P0口

LCDE=0;

RS=0;

RW=0;

}

unsigned char busycheck()//*****忙狀態檢查*******//

{

unsigned char i;

LCDE=0;

RS=0;

RW=0;

RS=0;

RW=1;

LCDE=1;

i=Ddata;

LCDE=0;

return(i);

}

void init()//**********初始化程序,必須按照產品的資料介紹的過程進行********//

{

wr_com(0x38); //*****顯示模式設置必須三次,不用檢測忙信號

delay5ms();

wr_com(0x38);

delay5ms();

wr_com(0x38);

delay5ms();

wr_com(0x01); ///***清屏****

delay5ms();

busycheck();

wr_com(0x08);

delay5ms();

busycheck();

delay5ms();

wr_com(0x06); ///****光標移動設置,寫一個字符後地址指針加1***

delay5ms();

busycheck();

delay50us();

wr_com(0x38); ////***顯示模式設置****

delay50us();

busycheck();

delay50us();

wr_com(0x0c); /////***顯示開,不顯示光標***

delay50us();

busycheck();

delay50us();

wr_com(0x40); //set cgram address

delay50us();

delay50us(); //***這些延時可用可不用***//

}

void display()

{ unsigned char i;

wr_com(0x80); //set ram address

delay50us();

busycheck();

delay50us();

for(i=0;i6;i++)

{wr_data(line1[i]); //display(6個字符)

delay50us();

busycheck();}

busycheck();

delay50us();

wr_com(0xc0); // 0xc0=0x80+0x40

delay50us();

busycheck();

delay50us();

for(i=0;i16;i++)

{

wr_data(line2[i]); //display

delay50us();

busycheck();

}

}

/******************************溫度傳感器ds1820程序***************************************/

void delay_18B20(unsigned int i)//延時1微秒

{

while(i–);

}

void ds1820rst()/*ds1820複位*/

{ unsigned char x=0;

DQ = 1; //DQ複位

delay_18B20(4); //延時

DQ = 0; //DQ拉低

delay_18B20(100); //精確延時大於480us

DQ = 1; //拉高

delay_18B20(40);

}

uchar ds1820rd()/*讀數據*/

{ unsigned char i=0;

unsigned char dat = 0;

for (i=8;i0;i–) //讀一個位元組的數據函數

{ DQ = 0; //給脈衝信號

dat=1;

DQ = 1; //給脈衝信號

if(DQ)

dat|=0x80; //等價於 dat =

dat | 0x80,dat和0x80做「或」的運算, 結果是最高位置1,其它位保持不變。

delay_18B20(10);

}

return(dat);

}

void ds1820wr(uchar wdata)/*寫數據*/

{unsigned char i=0;

for (i=8; i0; i–)

{ DQ = 0;

DQ = wdata0x01;

delay_18B20(10);

DQ = 1;

wdata=1;

//右移一位

}

}read_temp()/*讀取溫度值並轉換*/

{uchar a,b;

ds1820rst(); //ds1802/初始化程序

ds1820wr(0xcc);//*跳過讀序列號*/

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

ds1820rst();

ds1820wr(0xcc);//*跳過讀序列號*/

ds1820wr(0xbe);//*讀取溫度*/

a=ds1820rd(); //讀低八位

b=ds1820rd(); //讀高八位

tvalue=b;

tvalue=8;

tvalue=tvalue|a;

if(tvalue0x0fff)

tflag=0;

else //「」 是邏輯與「|」 是邏輯或if(dat 0x01):不管dat是什麼數和0x01(00000001)做了「與」的運算後,最低位保持不變,其它位均為0.如果dat的最低位為1,則表達式為真,就會執行if語句中的內容。如果dat最低位為0,則表達式為假,不執行if語句,執行if語句後的下一條語句。dat |= 0x80:等價於 dat = dat | 0x80,dat和0x80做「或」的運算,意思是最高位置1,其它位保持不變。

具體的可以去參考一下C語言的相關語法。

{tvalue=~tvalue+1;

tflag=1;

}

tvalue=tvalue*(0.625);//溫度值擴大10倍,精確到1位小數

return(tvalue);

}

/*******************************************************************/

void ds1820disp()//溫度值顯示

{ uchar flagdat;

disdata[0]=tvalue/1000+0x30;//百位數

disdata[1]=tvalue%1000/100+0x30;//十位數

disdata[2]=tvalue%100/10+0x30;//個位數

disdata[3]=tvalue%10+0x30;//小數位

if(tflag==0)

flagdat=0x20;//正溫度不顯示符號

else

flagdat=0x2d;//負溫度顯示負號:-

if(disdata[0]==0x30)

{disdata[0]=0x20;//如果百位為0,不顯示

if(disdata[1]==0x30)

{disdata[1]=0x20;//如果百位為0,十位為0也不顯示

}

}

wr_com(0x88);

wr_data(flagdat);//顯示符號位

wr_com(0x89);

wr_data(disdata[0]);//顯示百位

wr_com(0x8a);

wr_data(disdata[1]);//顯示十位

wr_com(0x8b);

wr_data(disdata[2]);//顯示個位

wr_com(0x8c);

wr_data(0x2e);//顯示小數點

wr_com(0x8d);

wr_data(disdata[3]);//顯示小數位

}

void main()

{

TMOD=0X01;

EA=1;

ET0=1;

TR0=1;

TH0=(65536-4995)/256;

TL0=(65536-4995)%256;

init();

while(1)

{

read_temp();//讀取溫度

ds1820disp();//顯示

time(); //時間程序

display();//時間顯示程序

}

}

void t0(void)interrupt 1 using 0

{

TH0=(65536-4995)/256;

TL0=(65536-4995)%256;

count++;

if(count==200){count=0;sec++;}

if(sec==60){sec=0;min++;}

if(min==60){min=0;hour++;}

if(hour==24){hour=0;}

}

void time()

{

line2[15]=tab[sec%10];line2[14]=tab[sec/10];

line2[12]=tab[min%10];line2[11]=tab[min/10];

line2[9]=tab[hour%10];line2[8]=tab[hour/10];

if(!P1_2){delay();if(!P1_2){delay();sec++;if(sec==60){sec=0;}}}

if(!P1_1){delay();if(!P1_1){delay();min++;if(min==60){min=0;}}}

if(!P1_0){delay();if(!P1_0){delay();hour++;if(hour==24){hour=0;}}}

}

給你參考一下,這樣才能提高哦

1602顯示超聲波測距的C語言程序和Proteus仿真圖

#include”reg52.h”

#include”intrins.h”

#define uchar unsigned char //無符號8位

#define uint unsigned int //無符號16位

#define ulong unsigned long //無符號32位

sbit K1=P1^0; //按下K1後,開始測距

sbit LEDRed=P1^1; //測距指示燈,亮表示正在測距,滅表示測距完成

//sbit BEEP=P1^2; //報警測量超出範圍

sbit Trig=P2^5; //HC-SR04觸發信號輸入

sbit Echo=P2^6; //HC-SR04迴響信號輸出

float xdata DistanceValue=0.0; //測量的距離值

float xdata SPEEDSOUND; //聲速

float xdata XTALTIME; //單片機計數周期

uchar xdata stringBuf[6]; //數值轉字符串緩衝

//LCD1602提示信息

uchar code Prompts[][16]=

{

{“Measure Distance”}, //測量距離

{“- Out of Range -“}, //超出測量範圍

{“MAX range 400cm “}, //測距最大值400cm

{“MIN range 2cm “}, //測距最小值2cm

{” “}, //清屏

{” Press K1 Start “} //按鍵開始測量

};

uchar xdata DistanceText[]=”Range: “; //測量結果字符串

uchar xdata TemperatureText[]=”Temperature: “;//測量溫度值

extern void LCD_Initialize(); //LCD初始化

extern void LCD_Display_String(uchar *, uchar); //字符串顯示

extern void ReadTemperatureFromDS18B20(); //從DS18B20讀取溫度值

extern int xdata CurTempInteger;

//毫秒延時函數

void DelayMS(uint ms);

//20微秒延時函數

void Delay20us();

//HCSR04初始化

void HCSR04_Initialize();

//測量距離

float MeasuringDistance();

//測距的數值排序求平均

float DistanceStatistics();

//輸出距離值到LCD1602上

void DisplayDistanceValue(float dat);

//將無符號的整數轉成字符串,返回字符串長度,不包括’\0’結束符

uchar UnsigedIntToString(uint value);

//蜂鳴器

//void Beep(uchar time);

//顯示溫度值

void DisplayTemperatureValue();

void main()

{

LCD_Initialize();//LCD1602初始化

LCD_Display_String(Prompts[0],0x00);

LCD_Display_String(Prompts[5],0x40);

ReadTemperatureFromDS18B20(); //測溫度

HCSR04_Initialize(); //HC-SR04初始化

while(1)

{

if(K1==0)

{

DelayMS(5);

if(K1==0)

{

//Beep(1);

while(K1==0);

LEDRed=0;

ReadTemperatureFromDS18B20();//測溫度

DisplayTemperatureValue();

if(CurTempInteger14)

CurTempInteger=14;

else if(CurTempInteger26)

CurTempInteger=26;

SPEEDSOUND=334.1+CurTempInteger*0.61;//計算聲速

DistanceValue=DistanceStatistics(); //測距並返回距離值

DisplayDistanceValue(DistanceValue); //顯示距離值

LEDRed=1;

}

}

}

}

//測距的數值排序求平均

float DistanceStatistics()

{

uchar i,j;

float disData[7],t;

//連續測距

for(i=0;i7;i++)

{

disData=MeasuringDistance();

DelayMS(80);

}

//排序

for(j=0;j=6;j++)

{

for(i=0;i7-j;i++)

{

if(disDatadisData[i+1])

{

t=disData;

disData=disData[i+1];

disData[i+1]=t;

}

}

}

return (disData[2]+disData[3]+disData[4])/3;

}

//測量距離

float MeasuringDistance()

{

//最大定時時間約65ms

TH0=0;

TL0=0;

//生成20us的脈衝寬度的觸發信號

Trig=1;

Delay20us();

Trig=0;

//等待迴響信號變高電平

while(!Echo);

TR0=1; //啟動定時器0

//等待迴響信號變低電平

while(Echo);

TR0=0; //關閉定時器0

//返回距離值(mm)

return (SPEEDSOUND*XTALTIME*((float)TH0*256+(float)TL0))/2000;

}

//HCSR04初始化

void HCSR04_Initialize()

{

//計算單片機計數周期 晶振=11.953M 單位us

XTALTIME=12/11.953;

//溫度25度時聲速的值

SPEEDSOUND=334.1+25*0.61;

Trig=0;

Echo=0;

TMOD=0x01;

}

//輸出距離值到LCD1602上

void DisplayDistanceValue(float dat)

{

uchar i=0,j=0,len;

uint value;

value=(uint)dat;

//範圍檢查大於4000mm和小於20mm都為超出測量範圍

if(value4000)

{

LCD_Display_String(Prompts[1],0x00);

LCD_Display_String(Prompts[2],0x40);

//Beep(2);

}

else if(value20)

{

LCD_Display_String(Prompts[1],0x00);

LCD_Display_String(Prompts[3],0x40);

//Beep(2);

}

else

{

//將數值轉換成字符串

len=UnsigedIntToString(value);

//保留1位小數

while(stringBuf!=’\0′)

{

if(len-j==1)

{

DistanceText[6+j]=’.’;

j++;

}else

{

DistanceText[6+j]=stringBuf;

i++;

j++;

}

}

DistanceText[6+j]=’c’;

j++;

DistanceText[6+j]=’m’;

i=7+j;

//剩餘位置補空格

while(i16)

{

DistanceText=’ ‘;

i++;

}

//LCD_Display_String(Prompts[0],0x00);

LCD_Display_String(DistanceText,0x40);

}

}

//顯示溫度值

void DisplayTemperatureValue()

{

TemperatureText[13]=CurTempInteger/10+’0′;

TemperatureText[14]=CurTempInteger+’0′;

TemperatureText[15]=’C’;

LCD_Display_String(TemperatureText,0x00);

}

//將無符號的整數轉成字符串,返回字符串長度

uchar UnsigedIntToString(uint value)

{

uchar i=0,t,length;

//從個位開始轉換

do

{

stringBuf=’0’+value;

value=value/10;

i++;

}while(value!=0);

length=i;

//將字符串顛倒順序

for(i=0;i(length/2);i++)

{

t=stringBuf;

stringBuf=stringBuf[length-i-1];

stringBuf[length-i-1]=t;

}

stringBuf[length]=’\0′;

return length;

}

//蜂鳴器

//延時函數 毫秒 @12.000MHz

void DelayMS(uint ms)

{

uchar i, j;

while(ms–)

{

_nop_();

i = 2;

j = 239;

do

{

while (–j);

}while (–i);

}

}

//延時函數 20微秒 @12.000MHz

void Delay20us()

{

uchar i;

_nop_();

i = 7;

while (–i);

}

//定時器0中斷

void Timer0() interrupt 1

{

}

//DS18B20代碼:

#include

#include

#define uchar unsigned char //無符號8位

#define uint unsigned int //無符號16位

//定義DS18B20端口DS18B20_DQ

sbit DS18B20_DQ = P2^7;

//當前採集的溫度值整數部分

int xdata CurTempInteger;

//當前採集的溫度值小數部分

int xdata CurTempDecimal;

void Delayus(uint count)

{

while (–count);

}

uchar Reset_DS18B20()

{

uchar status;

DS18B20_DQ=1;

Delayus(1);

//開始複位過程

DS18B20_DQ=0; //數據線拉低

Delayus(100); //延時480us-960us

DS18B20_DQ=1; //數據線拉高

Delayus(10); //延時15us-60us

status=DS18B20_DQ; //讀取數據線上的狀態

Delayus(120);

return status;

}

void WriteByteToDS18B20(uchar dat)

{

uchar i;

for(i=0;i8;i++)

{

DS18B20_DQ=0;

DS18B20_DQ=dat0x01; //發送1位數據

Delayus(15); //延時60us以上

DS18B20_DQ=1; //釋放總線,等待總線恢復

dat=1; //準備下一位數據

}

}

uchar ReadByteFromDS18B20()

{

uchar i,dat=0;

for(i=0;i8;i++)

{

DS18B20_DQ=0; //拉低總線,產生讀信號

dat=1;

DS18B20_DQ=1; //釋放總線,準備讀1位數據

Delayus(2); //延時4us

if(DS18B20_DQ) dat|=0x80; //合併每位數據

Delayus(15); //延時60us

DS18B20_DQ=1; //拉高總線,準備讀下1位數據

}

return dat;

}

void ReadTemperatureFromDS18B20()

{

uchar flag=0;//正負符號標誌

//存儲當前採集的溫度值

uchar TempValue[]={0,0};

if(Reset_DS18B20())

{

CurTempInteger=255;

CurTempDecimal=0;

}

else

{

WriteByteToDS18B20(0xCC);//跳過ROM命令

WriteByteToDS18B20(0x44);//溫度轉換命令

Reset_DS18B20();//複位

WriteByteToDS18B20(0xCC);//跳過ROM命令

WriteByteToDS18B20(0xBE);//讀取溫度暫存器命令

TempValue[0]=ReadByteFromDS18B20();//先讀低位元組溫度值

TempValue[1]=ReadByteFromDS18B20();//後讀高位元組溫度值

Reset_DS18B20();//複位

//計算溫度值

//先進行正溫度與負溫度判斷,高5位全為1(0xF8)則為負數

if((TempValue[1]0xF8)==0xF8)

{

//負溫度計算:取反加1,低位元組為0時,高位元組取反加1,否則不需要。

TempValue[1]=~TempValue[1];

TempValue[0]=~TempValue[0]+1;

if(TempValue[0]==0x00) TempValue[1]++;

flag=1;//負數標誌

}

//將溫度值分為整數和小數兩部分存儲(默認為12位精度)

CurTempInteger=((TempValue[1]0x07)4)|((TempValue[0]0xF0)4); if(flag) CurTempInteger=-CurTempInteger;

CurTempDecimal=(TempValue[0]0x0F)*625;

}

}

//LCD1602程序代碼:

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define Delay4us(){_nop_();_nop_();_nop_();_nop_();}

sbit LCD_RS=P2^0;

sbit LCD_RW=P2^1;

sbit LCD_EN=P2^2;

void LCDDelay(uint ms)

{

uchar i, j;

while(ms–)

{

_nop_();

i = 2;

j = 239;

do

{

while (–j);

}while (–i);

}

}

bit LCD_Busy_Check()

{

bit result;

LCD_RS=0; LCD_RW=1; LCD_EN=1;

Delay4us();

result=(bit)(P00x80);

LCD_EN=0;

return result;

}

void Write_LCD_Command(uchar cmd)

{

while(LCD_Busy_Check());

LCD_RS=0; LCD_RW=0; LCD_EN=0; _nop_(); _nop_();

P0=cmd; Delay4us();

LCD_EN=1; Delay4us(); LCD_EN=0;

}

void Write_LCD_Data(uchar dat)

{

while(LCD_Busy_Check());

LCD_RS=1;LCD_RW=0;LCD_EN=0;

P0=dat;Delay4us();

LCD_EN=1;Delay4us();LCD_EN=0;

}

void LCD_Set_POS(uchar pos)

{

Write_LCD_Command(pos|0x80);

}

void LCD_Initialize()

{

Write_LCD_Command(0x01); LCDDelay(5);

Write_LCD_Command(0x38); LCDDelay(5);

Write_LCD_Command(0x0C); LCDDelay(5);

Write_LCD_Command(0x06); LCDDelay(5);

}

void LCD_Display_String(uchar *str, uchar LineNo)

{

uchar k;

LCD_Set_POS(LineNo);

for(k=0;k16;k++)

{

Write_LCD_Data(str[k]);

}

}

void LCD_Display_OneChar(uchar Dat, uchar X, uchar Y)

{

Y = 0x01; //限制Y不能大於1(2行,0-1)

X = 0x0F; //限制X不能大於15(16個字符,0-15)

if(Y) {X |= 0x40;} //當要在第二行顯示時地址碼+0x40;

X |= 0x80; //算出指令碼

Write_LCD_Command(X);

Write_LCD_Data(Dat);

}

這是 單片機 1602的C語言的源程序: 在此: 尋一個能解釋每一步代碼含義的朋友

這和你的硬件電路有關係,看程序好像P0是數據輸入端

#include reg51.h

#define uchar unsigned char //宏定義

sbit Rs=P2^0; //P2.0引腳接1602的數據/命令選擇端

sbit Rw=P2^1; //P2.1引腳接1602的讀/寫控制端

sbit E=P2^7; //P2.7引腳接1602的使能端

uchar table[]=”Liu Xiao Ming”,buffer; //定義兩個字符型變量

int k=0;

void delay(int t) //延時子程序

{

int i,j;

for(i=0;i255;i++)

for(j=0;jt;j++) ;

}

void writecom(void) //寫命令子程序

{

Rs=0;Rw=0;E=1;

P0=buffer;

E=0;

delay(5);

}

void writedata(void) //寫數據子程序

{

Rs=1;Rw=0;E=1;

P0=buffer;

E=0;

delay(5);

}

void init(void) //1602初始化子程序

{

buffer=0x08;writecom(); //顯示關閉

buffer=0x3c;writecom(); //

buffer=0x14;writecom();

buffer=0x06;writecom(); //顯示光標移動設置

buffer=0x01;writecom(); //顯示清屏

buffer=0x0f;writecom(); //

}

void main()

{

init(); //1602初始化

buffer=0x80; //

writecom();

buffer=0xc0;

writecom();

for(k=0;k20;k++)

{

buffer=table[k]; //緩存數據

writedata(); //向1602寫數據,使其顯示Liu Xiao Ming

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/250524.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-13 13:28
下一篇 2024-12-13 13:28

相關推薦

  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python購物車程序

    Python購物車程序是一款基於Python編程語言開發的程序,可以實現購物車的相關功能,包括商品的添加、購買、刪除、統計等。 一、添加商品 添加商品是購物車程序的基礎功能之一,用…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟件。在VB中,有許多不同的方法可以運行程序,包括編譯器、發佈程序以及命令行。在本文中…

    編程 2025-04-29

發表回復

登錄後才能評論